gpt4 book ai didi

c++ - 在 C++ 中使用 fstream 读取对象

转载 作者:太空狗 更新时间:2023-10-29 21:42:46 35 4
gpt4 key购买 nike

我正在尝试使用 fstream 将对象写入文件并在之后读取它,但是当我尝试使用 cout 在屏幕上显示读取的对象时,出现错误消息 Segmentation fault : 11 出现。有人可以帮我处理这段代码吗?提前致谢!

Produto *p1 = new Produto(1, "Refrigerante");

cout << "Produto p1 (pre serializacao): (" << p1->codigo << ") " << p1->descricao << endl;

ofstream serializationWriter;
serializationWriter.open("myobject.dat", ios::binary);
serializationWriter.write((char *)&p1, sizeof(p1));

Produto *p2;

ifstream serializationReader;
serializationReader.open("myobject.dat", ios::binary);
serializationReader.read((char *)&p2, sizeof(p2));

cout << "Produto p2 (pos serializacao): (" << p2->codigo << ") " << p2->descricao << endl;

最佳答案

您需要为 Produto 类提供一些序列化机制。例如:

class Produto {
// ...
private:
std::string m_str;
private:
friend ostream& operator<<(ostream& stream, const Produto& obj);
friend istream& operator>>(istream& stream, Prodoto& obj)
};

ostream& operator<<(ostream& stream, const Produto& obj)
{
// Write all data to stream.
// ...
stream << obj.m_str;
return stream;
}

istream& operator>>(istream& stream, Prodoto& obj)
{
// Read all data from strem.
// ...
stream >> obj.m_str;
return stream;
}

然后按如下方式使用它:

Produto p1(1, "Refrigerante");
ofstream serializationWriter;
// ...
serializationWriter << p1;

Produto p2;
ifstream serializationReader;
// ...
serializationReader >> p2;

有关详细信息,请参阅 overload ostream istream operator

关于c++ - 在 C++ 中使用 fstream 读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028045/

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