Возможный дубликат:
Сбой разрешения перегрузки при потоковом объекте через неявное преобразование в строку
Я знаю, что это не такая хорошая идея, но я действительно хочу знать причину, почему приведенный ниже код не компилируется (т.е. почему нет "приемлемого преобразования" ):
#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 *
.