进行一些重构,我在一个类中移动了一些代码后出错了。成员函数:
file.cpp:417: error: calling a protected constructor of class 'std::__1::basic_ostream<char>'
std::ostream logStream;
^
这是编译器错误消息:
std::filebuf fileBuffer;
std::ostream logStream(&fileBuffer);
...
if(sendToCout) {
logStream.rdbuf(std::cout.rdbuf());
}
这可能是一个解决方案吗?
{{1}}
答案 0 :(得分:0)
如果您看到例如this std::ostream
constructor reference您将看到唯一的公共构造函数是指向std::streambuf
对象的指针,例如您的变量fileBuffer
。
所以解决问题的一种方法是做
std::filebuf fileBuffer;
std::ostream logStream(&fileBuffer);
如果您想要输出到文件,更好的解决方案是使用std::ofstream
。
如果您想要一个更通用的解决方案,应该可以使用任何类型的输出流,那么重新设计使用引用是一种可能的解决方案。
或者,您知道,尝试找到一个现有的日志记录库,它已经为您处理了所有内容。