#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;
Run Code Online (Sandbox Code Playgroud)
通过这个类我试图创建一个登录到文件的Logger类.但它给出了错误
error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索它,发现它是因为复制了流.据我所知,在此代码中没有复制ofstreams.
你们可以帮助我吗?提前致谢.
〜
static Logger getLogger()
{
return log;
}
Run Code Online (Sandbox Code Playgroud)
尝试返回一个Logger值,这需要一个拷贝构造函数.编译器生成的复制构造函数尝试创建该成员的副本debug.这就是你得到错误的原因.
你可以实现一个拷贝构造函数(可能没有意义,因为debug成员会有所不同)或者通过引用返回:
static Logger& getLogger()
{
return log;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下是安全的,因为它log具有静态存储持续时间.
正确的电话会是这样的:
Logger& l = Logger::getLogger();
Run Code Online (Sandbox Code Playgroud)
在这种情况下l指的是Logger::log.
| 归档时间: |
|
| 查看次数: |
6272 次 |
| 最近记录: |