【发布时间】:2012-12-02 17:07:30
【问题描述】:
可能重复:
Overload resolution failure when streaming object via implicit conversion to string
我知道这样做不是一个好主意,但我真的很想知道下面的代码无法编译的原因(即为什么“没有可接受的转换”):
#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实例与ostreams 和<<一起使用,您应该覆盖正确的方法:msdn.microsoft.com/en-us/library/1z2f6c2k(v=vs.100).aspx -
@Jack 我认为,OP 更感兴趣的是它为什么不起作用,而不是如何使用完全不同的方法来修复它。
标签: c++ string operator-overloading