能否請你幫我在下面的代碼中發現的問題 (代碼類似於C++ stream as a parameter when overloading operator<<):「錯誤:不對應的「操作符<<」用的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;
}
一切工作正常,直到我取消註釋包含「世界」的行。在這種情況下,海灣合作委員會產生 錯誤:'運營商< <'不匹配... ...
有趣的是,VS2008沒有這個代碼的問題。
謝謝!
Visual Studio做了許多其他編譯器不會做的類型轉換。嘗試std :: string(「world」).c_str(); – steveg89 2012-08-07 17:35:08