(这是一个家庭作业项目。)我试图将类A中的对象(包含几个字符串和整数,以及来自B类的对象的列表)写入文件。然后我必须从文件中读回这些对象并显示它们的内容。我正在使用此代码:
写作:
ofstream ofs("filestorage.bin", ios::app|ios::binary);
A d;
ofs.write((char *)&d, sizeof(d));
ofs.close();
读:
ifstream ifs("filestorage.bin", ios::binary);
A e(1);
while(ifs.read((char *)&e, sizeof(e))) {
cout<<e;
}
ifs.close();
<<
已经重新定义。
它将数据写入文件,然后将其读回,显示我想要的所有内容但最终我得到了一个很好的“访问冲突”错误。我还尝试在文件中编写和读取简单变量(如int
s)。这很好;但是当我尝试读取一个对象或字符串时,我得到“访问冲突”。写作接缝没问题,因为我没有错误。
你能告诉我为什么会这样,我该如何解决?如果有必要,我也可以发布我的A和B课程。谢谢!
答案 0 :(得分:1)
为您的班级实施两个运算符<<
和>>
。
class A {
int a;
string s;
pubilc:
friend ostream& operator<< (ostream& out, A& a ) {
out << a.a << endl;
out << a.s << endl;
}
friend istream& operator>> (istream& is, A& a ) {
//check that the stream is valid and handle appropriately.
is >> a.a;
is >> a.s;
}
};
<强>写:强>
A b;
ofstream ofs("filestorage.bin", ios::app|ios::binary);
ofs << b;
<强>读:强>
fstream ifs("filestorage.bin", ios::binary);
A b;
ifs >> b;
答案 1 :(得分:0)
您可以尝试检查流状态
while(ifs.read((char *)&e, sizeof(e)).good()){
cout<<e;
}