关于种的隐式转换

关于类的隐式转换我在验证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;
    }