错误:"std::ios_base::ios_base(const std::ios_base&)"是私有的

  • 本文关键字:base ios std 错误 const c++ stream
  • 更新时间 :
  • 英文 :

#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具有静态存储持续时间

正确的电话看起来像:

Logger& l = Logger::getLogger();

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

相关内容

  • 没有找到相关文章

最新更新