mógłbyś mi pomóc w znalezieniu problemu w następującym kodzie (kod jest podobny do C++ stream as a parameter when overloading operator<<):„Błąd: nie pasuje do„operator <<”podczas pracy z std :: string
#include <iostream>
#include <string>
class logger
{
public:
void init(std::ostream& ostr)
{
stream = &ostr;
}
template< typename t >
logger& operator <<(t& data)
{
*stream << data;
return *this;
}
logger& operator <<(std::ostream& (*manip)(std::ostream &))
{
manip(*stream);
return *this;
}
logger& operator <<(std::ios_base& (*manip)(std::ios_base&))
{
manip(*stream);
return *this;
}
private:
std::ostream* stream;
};
int main(int argc, char* argv[])
{
logger log;
log.init(std::cout);
log << "Hello" << std::endl;
//log << std::string("world") << std::endl;
return 0;
}
Wszystko działa dobrze, dopóki nie odkomentuję linii zawierającej "świat". W takim przypadku GCC generuje błąd : brak dopasowania dla "operatora < <" w ...
To interesujące, że VS2008 nie ma problemu z tym kodem.
Dziękujemy!
Visual Studio wykonuje wiele konwersji typów, których nie wykonają inne kompilatory. Spróbuj std :: string ("world") .c_str(); – steveg89