关于类的隐式转换我在验证c++ primer书上的例子,关于隐式转换的问题我的代码如下:#include iostreamusin
关于类的隐式转换
我在验证c++ primer书上的例子,关于隐式转换的问题
我的代码如下:
#include <iostream>
using namespace std;
class hell
{
string a;
public:
hell()
{
a="hello";
}
hell(std::istream &is)
{
cin>>a;
}
hell(string a)
{
this->a=a;
}
int same(hell & A)
{
return a==A.a;
}
void print()
{
cout<<a<<endl;
}
};
int main()
{
hell aa;
hell bb(cin);
hell cc=cin;
if(aa.same(cin))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
cc.print();
return 0;
}
红色字体那块为什么不能调用隐式转换aa.same(cin)
蓝色字体都可以啊
不知道是不是编译器的问题 我的是win7+codeblocks+gcc编译器
[解决办法]
hell(std::istream &is)会导致一个从istream类型的左值到hell类型的转换,但转换会导致生成一个hell的临时对象。而你的same要求的是一个hell &类型,临时对象是不允许绑定到non-const reference上的
same 函数应该改为:
same(hell const & A) const
{
return a==A.a;
}
