考虑下面的示例代码:
#include <iostream>
using namespace std;
class dummy
{
private:
int y;
public:
dummy(int b = 0) : y(b) {
}
friend ostream& operator<<(ostream& os, const dummy& obj);
};
ostream& operator<<(ostream& os, const dummy& obj)
{
os << obj.y;
return os;
}
class sample
{
private:
int x;
public:
sample(int a = 0) : x(a)
{
}
operator dummy()
{
dummy d(100);
return d;
}
operator int()
{
return x;
}
};
int main()
{
sample ob1(5);
dummy d;
//d = ob1; //Line1
d = (dummy)ob1; //Line2
cout << d << "\n";
}
在1号线,隐式转换完成。 据我所知,隐式转换在这种情况下如何工作的。 编译器没有给出错误。
但是,在2号线的显式的转换sample
对象做是为了dummy
对象。 但是,编译器提供了以下错误。
错误:重载`虚设的呼叫(样品)”不明确
注意:考生有:虚设::假人(常量哑)
注意:虚拟::假人(INT)
问题:
为什么发生这些错误?
我不明白的错误消息的含义。 为什么候选功能
dummy
类中的错误提到?