これがエラーになる理由はわかりませんが、ostringstream の内容をデバッガーにスローできるように、endl に「似た」ものを追加しようとしています。私は次のものを持っています:
class debug_stream_info
{
public:
debug_stream_info(int errorLine, char *errorFile, int level)
:m_errorLine(errorLine), m_errorFile(errorFile), m_logLevel(level)
{
}
friend std::basic_ostringstream<char>& operator<<(std::basic_ostringstream<char>& os, debug_stream_info& debug_info);
private:
int m_errorLine;
std::string m_errorFile;
int m_logLevel;
};
std::basic_ostringstream<char>& operator<<(std::basic_ostringstream<char>& os, debug_stream_info& debug_info)
{
// Write the stream's contents to cpu_debug
// Deleted custom logging function. No errors here though
// Clear the stream for re-use.
os.str("");
os.seekp(0);
return os;
}
int main(int argc, char** argv)
{
std::ostringstream myout;
myout << "hey there" << " and some more " << "Numbers!!: " << 435 << 54.2 << " that's good for numbers" << debug_stream_info(__LINE__, __FILE__, LOG_LEVEL);
return 0;
}
私が得ているエラーは次のとおりですerror C2679: binary '<<' : no operator found which takes a right-hand operand of type 'debug_stream_info' (or there is no acceptable conversion)
。これはVS2008にあります。
私はsstream、iostreamなどを含めており、名前空間を正しく設定しています。他のエラーは発生していません。basic_ostream
すべての出現箇所をjustに置き換えてみましostringstream
たが、違いはありませんでした (w_char
後でバージョンを作成しますが、単純なケースを最初に機能させたかったのです)。上記の行でオブジェクトを作成し、その行で完全に構築されたオブジェクトを渡しましたが、エラーはまったく同じでした。2 番目の引数の署名もconst
変更せずに変更しました。
ここで私が間違っていることについてのアイデアはありますか?
編集:すべての応答がそこに入れたいように見えるので、 std::ostream を使用できませstd::ostringstream
んstd::basic_ostringstream
。その上、関数はとにかくostreamでコンパイルされません.ostreamにos.str()
はないメソッドを使用しているため、サブクラスのみです。