gpt4 book ai didi

c++ - std::ios_base::ios_base(const std::ios_base&) 是私有(private)的

转载 作者:行者123 更新时间:2023-11-28 06:26:05 25 4
gpt4 key购买 nike

我正在尝试将一个复杂对象保存到一个文件中,我正在像这样在复杂对象中重载 << 和 >> 运算符

class Data {
public:
string name;
double rating;

friend std::ostream& operator<<(std::ostream& o, const Data& p)
{
o << p.name << "\n";
o << p.rating << "\n";
return o;
}

friend std::istream& operator>>(std::istream& o, Data& p)
{
o >> p.name >> p.rating;
return o;
}
}

然后我使用运算符尝试将对象数组保存到文件中。这是包含所有文件相关方法的类:

class FileSave
{
public:
FileSave()
{
openFile();
load();
}

~FileSave()
{
if(editm)
outfile.close();
else
infile.close();
}

void openFile()
{
if(editm)
outfile.open("flatsave.elo", ios::out | ios::binary);
else
infile.open("flatsave.elo", ios::in | ios::binary);
}

void closeFile()
{
if(editm)
outfile.close();
else
infile.close();
}

void save()
{
changemode(true);
outfile << people << endl;
}

void load()
{
changemode(false);
for(int i=0; i < 10; i++)
{
infile >> people[i];
}
}

void changemode(bool editmode)
{
if(editm != editmode)
{
closeFile();
editm = editmode;
openFile();
}
}
private:
ofstream outfile;
ifstream infile;
bool editm = false;
};

其中 people 是数据对象的数组。

我已经尝试注释掉各种位,但错误仍然存​​在,其他线程说我的重载标题是错误的,但我只是一个字母一个字母地复制,所以我对此有点困惑。

提前致谢。

最佳答案

流不是容器;它们是数据流。因此,它们不能被复制,并且在 C++11 之前,强制执行的方式是它们的复制构造函数是 private

现在,由于您的类 FileSave 包含两个流,这意味着 FileSave 也不能被复制!该属性是可传递的。因此,您必须确保您不会尝试这样做,在这些成员周围引入一些间接的方法。

关于c++ - std::ios_base::ios_base(const std::ios_base&) 是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511272/

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