4
#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。

你们能帮帮我吗?提前致谢。

~

4

1 回答 1

6
static Logger getLogger()
{
   return log;
}

尝试Logger按值返回 a,这需要一个复制构造函数。编译器生成的复制构造函数尝试制作成员的副本debug。这就是您收到错误的原因。

您可以实现复制构造函数(可能没有意义,因为debug成员会不同)或通过引用返回:

static Logger& getLogger()
{
   return log;
}

在这种情况下这是安全的,因为log具有静态存储持续时间

正确的调用如下所示:

Logger& l = Logger::getLogger();

在这种情况下lLogger::log.

于 2012-10-18T09:20:05.567 回答