C++ 在C+中使用fstream读取对象+;

C++ 在C+中使用fstream读取对象+;,c++,C++,我试图使用fstream将对象写入文件并在之后读取,但当我试图使用cout在屏幕上显示读取的对象时,出现错误消息分段错误:11。有人能帮我处理这个代码吗?提前谢谢 Produto *p1 = new Produto(1, "Refrigerante"); cout << "Produto p1 (pre serializacao): (" << p1->codigo << ") " << p1->descricao <<

我试图使用
fstream
将对象写入文件并在之后读取,但当我试图使用cout在屏幕上显示读取的对象时,出现错误消息
分段错误: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*p1=新产品(1,“制冷剂”);

您需要为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; 
}
class Produto{
// ...
私人:
std::字符串m_str;
私人:
friend ostream&operator(istream&stream、Prodoto&obj)
};
ostream&operator>obj.m_街;
回流;
}
然后按如下方式使用:

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

Produto p2;
ifstream serializationReader;
// ...
serializationReader >> p2;
Produto p1(1,“制冷剂”);
流序列化编写器;
// ...
serializationWriter>p2;

有关更多详细信息,请参见使用boost序列化!它非常棒:
&p2
是指向指针的指针,一个
Produto**
。您可能希望使
p2
成为
Produto p2
中的实例。在
write
之后是否也需要关闭文件?
serializationWriter.write((char*)&p1,sizeof(p1))该变量的名称用词不当。您并不是在“序列化”数据——您所做的只是获取一个字节并将其写入文件。你不能用这种方式序列化非POD对象。@PaulMcKenzie,情况更糟。他只写了一个指向文件的指针,并将指针的相同数值读入
p2