【问题标题】:error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private错误:‘std::ios_base::ios_base(const std::ios_base&)’是私有的
【发布时间】:2012-10-18 09:17:36
【问题描述】:
#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。

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

~

【问题讨论】:

    标签: c++ stream


    【解决方案1】:
    static Logger getLogger()
    {
       return log;
    }
    

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

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

    static Logger& getLogger()
    {
       return log;
    }
    

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

    正确的调用如下所示:

    Logger& l = Logger::getLogger();
    

    在这种情况下,l 指的是Logger::log

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多