#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
has 静态存储时间.
正确的调用如下所示:
Logger& l = Logger::getLogger();
在这种情况下l
指的是Logger::log
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)