#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。
你能帮助我吗?
提前谢谢。
〜
答案 0 :(得分:6)
static Logger getLogger()
{
return log;
}
尝试按值返回Logger
,这需要复制构造函数。编译器生成的复制构造函数尝试复制成员debug
。这就是你得到错误的原因。
你可以实现一个拷贝构造函数(可能没有意义,因为debug
成员会有所不同)或者通过引用返回:
static Logger& getLogger()
{
return log;
}
在这种情况下是安全的,因为log
具有静态存储时间。
正确的通话如下:
Logger& l = Logger::getLogger();
在这种情况下l
引用Logger::log
。