我不知道为什么会出错,但我只是想在 endl 中添加一些“类似”的东西,这样我就可以将 ostringstream 中的内容扔到我们的调试器中。我有以下内容:
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)
对于 main 中的行。这是在VS2008上。
我包括 sstream、iostream 等,并正确设置了命名空间。我没有收到其他错误。我什至尝试用basic_ostream
just替换所有出现的情况ostringstream
,但没有任何区别(我稍后会有一个w_char
版本,但我希望首先使用简单的案例)。我在上面的行上做了对象,然后在行上传递了一个完全构造好的对象,错误是完全一样的。我已经更改了第二个参数的签名,也const
没有更改。
关于我在这里做错了什么的任何想法?
编辑:因为每个响应似乎都想把它放在那里,我不能使用 std::ostream 因为我希望它只适用于std::ostringstream
(and std::basic_ostringstream
) 而不是任何类型的输出流。此外,该函数无论如何都不会使用 ostream 编译,因为我正在使用该os.str()
方法,它不在 ostream 中,只有子类。