gpt4 book ai didi

c++ - 错误 : ‘std::ios_base::ios_base(const std::ios_base&)’ is private

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:03 25 4
gpt4 key购买 nike

#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

我用谷歌搜索了一下,发现是因为复制了流。据我所知,在这段代码中没有发生流的复制。

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

~

最佳答案

static Logger getLogger()
{
return log;
}

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

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

static Logger& getLogger()
{
return log;
}

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

正确的调用应该是这样的:

Logger& l = Logger::getLogger();

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

关于c++ - 错误 : ‘std::ios_base::ios_base(const std::ios_base&)’ is private,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com