#include <iostream>
#include <fcntl.h>
#include <fstream>
using namespace std;
class Logger
{
private:
ofstream debug;
Logger()
{
debug.open("debug.txt");
}
static Logger log;
public:
static Logger getLogger()
{
return log;
}
void writeToFile(const char *data)
{
debug << data;
}
void close()
{
debug.close();
}
};
Logger Logger::log;
通过此类,我尝试创建一个记录到文件中的Logger类。但是它给出了
之类的错误error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
我谷歌搜索了它,发现它是由于复制流。据我所知,在此代码中,没有任何复制的ofstreams进行。
你们能帮我吗?预先感谢。
〜
static Logger getLogger()
{
return log;
}
尝试按值返回Logger
,这需要复制构造群。编译器生成的复制构建器试图制作成员debug
的副本。这就是为什么您会遇到错误的原因。
您可以实现复制构造函数(可能没有意义,因为debug
成员会不同),也可以通过参考返回:
static Logger& getLogger()
{
return log;
}
在这种情况下是安全的,因为log
具有静态存储持续时间。
正确的电话看起来像:
Logger& l = Logger::getLogger();
在这种情况下,l
是指Logger::log
。