我有一个带有指向类对象的指针的地图,我试图将它们全部输出到二进制文件然后再读回来。我不相信我的语法是正确的,因为当我回读它们时它们会被破坏,即它们在进入文件之前似乎没有任何数据。在此之前的行我遍历数据并将它们全部输出,所以我知道它们在打印之前是正常的
这是将帐户输出到二进制文件的代码。
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));
}
答案 0 :(得分:1)
由于以下几个原因,这不是你如何序列化对象:
序列化并不像将对象的字节写入文件那么容易。
简单的解决方案是使用现有的库 - google protocol buffers可以想到。
另一个是自己实现它,但这很难,尤其是如果你想在多个平台/操作系统上提供支持的话。
答案 1 :(得分:0)
你会看到记忆的地址而已。你必须编写更复杂的方法。有关一些想法,请参阅Google protobuf encoding。
答案 2 :(得分:0)
看起来您正在尝试将强制转换为char*
的内存地址写入文件。这些数字无关紧要。大概你想要序列化那些指针所指向的对象。首先,您需要找到一种方法来序列化和反序列化该类型的对象,然后通过重新引用地图中保存的指针将它们写入文件。