0

我有一个带有指向类对象的指针的映射,我试图将它们全部输出到二进制文件中,然后将它们读回。我不相信我的语法是正确的,因为当我读回它们时它们被破坏了,即在它们进入文件之前似乎没有任何数据。在此之前的行我遍历数据并将它们全部输出,所以我知道它们在打印之前没问题

这是将帐户输出到二进制文件中的代码。

for (it = accounts.begin(); it != accounts.end(); it++)
{
    outFile.write((char*)&(*it).second, sizeof(Account));
}

任何人都知道这是否可以?

编辑:它不是

for (it = accounts.begin(); it != accounts.end(); it++)
{
    outFile.write((char*)&(*(it->second)), sizeof(Account));
}
4

3 回答 3

1

这不是您序列化对象的方式,原因如下:

  • 如果对象是多态的,大多数(全部?)实现都会有一个指向对象内部虚拟表的指针,所以你写了那个,但是当你读回来时,它不再有效。
  • 其他指向成员的指针被写入,但当你读回它们时没有意义。

序列化不像将对象的字节写入文件那么容易。

简单的解决方案是使用现有的库 -谷歌协议缓冲区浮现在脑海中。

另一个是自己实现它,但这很难,特别是如果你想在多个平台/操作系统上获得支持。

于 2012-10-26T11:04:07.470 回答
0

您将看到内存地址,仅此而已。您必须编写更复杂的方法。有关一些想法,请参阅Google protobuf encoding

于 2012-10-26T11:04:15.350 回答
0

看起来您正在尝试将转换char*为文件的内存地址写入文件。这些数字将没有任何意义。大概你想序列化这些指针指向的对象。因此,首先您需要找到一种方法来序列化和反序列化该类型的对象,然后通过重新引用映射中保存的指针将它们写入文件。

于 2012-10-26T11:05:01.090 回答