可能重复:
通过隐式转换为字符串流式传输对象时重载解析失败
我知道这样做不是一个好主意,但我真的很想知道下面的代码无法编译的原因(即为什么“没有可接受的转换”):
#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 *
.