ostream定义出错

时间:2016-03-12 13:16:53

标签: c++ clang++ ostream

进行一些重构,我在一个类中移动了一些代码后出错了。成员函数:

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}}

1 个答案:

答案 0 :(得分:0)

如果您看到例如this std::ostream constructor reference您将看到唯一的公共构造函数是指向std::streambuf对象的指针,例如您的变量fileBuffer

所以解决问题的一种方法是做

std::filebuf  fileBuffer;
std::ostream  logStream(&fileBuffer);

如果您想要输出到文件,更好的解决方案是使用std::ofstream

如果您想要一个更通用的解决方案,应该可以使用任何类型的输出流,那么重新设计使用引用是一种可能的解决方案。

或者,您知道,尝试找到一个现有的日志记录库,它已经为您处理了所有内容。