可能是重复问题:
当通过隐式转换为字符串流对象时出现重载解析失败
我知道这样做不是一个好主意,但我真的想知道下面的代码为什么无法编译(即为什么出现“没有可接受的转换”):
#include <iostream>
#include <string>
class Test
{
public:
operator std::string () const;
};
Test::operator std::string () const
{
return std::string("Test!");
}
int main ()
{
std::string str = "Blah!";
std::cout << str << std::endl;
Test test;
str = test;//implicitly calls operator std::string without complaining
std::cout << str << std::endl;
std::cout << test;//refuses to implicitly cast test to std::string
return 0;
}
在Visual Studio 2010中,我遇到了这个错误:"error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Test' (or there is no acceptable conversion)
"
<<
操作符是否会隐式地将std::string
转换为其他类型以便使用它?如果是,我需要重载我的类中的哪个操作符才能使这个操作生效?我不相信我真的需要使用operator char *
。
<<
дёҺTest
е®һдҫӢдёҖиө·дҪҝз”ЁпјҢжӮЁеә”иҜҘиҰҶзӣ–жӯЈзЎ®зҡ„ж–№жі•пјҡhttp://msdn.microsoft.com/en-us/library/1z2f6c2k(v=vs.100).aspx - Jack