は、次のコードで 問題を見つけることで私を助けてもらえ(コードはC++ stream as a parameter when overloading operator<<に似ています):「エラー:演算子<<」の不一致」のstd ::文字列を扱うとき
#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;
}
"world"を含む行のコメントを解除するまでは、すべてうまく動作します。この場合、GCCは エラーを出力します。「演算子< <」と一致しません。
このコードではVS2008に問題はありません。
ありがとうございました!
ビジュアルスタジオは、他のコンパイラではできない多くの型変換を行います。 try std :: string( "world").c_str(); – steveg89