将对象(指针)在地图中输出到二进制文件
Outputting an object (pointer) in a map to a binary file
我有一个带有指针的映射到类的对象,我正在尝试将它们全部输出到二进制文件中,然后将其读回。我不相信我的语法正确,因为当我回信它们时,它们被打破了,即,似乎没有在档案进入文件之前给出的任何数据。在此之前,我会通过数据迭代并输出所有内容,因此我知道它们在打印之前还可以
这是将帐户输出到二进制文件中的代码。
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));
}
这不是您出于多种原因序列化对象的方式:
- 如果对象是多态性的,则大多数(全部?)实现将有一个指向对象内的虚拟表的指针,因此您要编写它,但是当您回复它时,它不再有效。
- 编写了其他指针,但当您回信时毫无意义。
序列化并不像编写对象的字节要文件。
简单的解决方案是使用现有库-Google协议缓冲区的想法。
另一个是自己实施,但这很难,尤其是如果您想在多个平台/操作系统上支持。
看起来您正在尝试将施放到char*
的内存地址写入文件。这些数字将没有任何相关性。大概您想序列化这些指针指向的对象。因此,首先,您需要找到一种序列化和去序列化对象的方法,然后通过重新引用地图中持有的指针来将其写入文件。
您将看到内存的地址,而不再是。您必须写更复杂的方法。请参阅Google Protobuf编码一些想法。
相关文章:
- 读取二进制文件时如何输出?
- C++实现代码中的字符串不应存在于输出二进制文件中.如何解决
- 在C 中输出到二进制文件中的麻烦
- 如何获取与 objdump 输出的标签相对应的 ELF 二进制文件中的文件偏移量
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- 将对象(指针)在地图中输出到二进制文件
- 如何将std::映射输出到二进制文件
- 读取并输出二进制文件(C++)中位置的字节
- 在线C++编译器:为我输出二进制文件
- 正在读取C++中的二进制文件,并将结果输出为hexdump
- 如何在 C++ 中使用更改光标输入和输出二进制文件
- C ++如何以二进制格式输出Ply文件
- 如何将整数和双精度输出到二进制文件
- 二进制文件中结构的输出返回垃圾
- 用C++将二进制字符串输出到二进制文件
- 自动使输出二进制文件大于命令行编译的二进制文件
- 字节输出到二进制文件c++
- 输出一个写在二进制文件c++中的double
- 从turbo c++中的二进制文件读取后出现意外输出
- 有没有一种方法可以在输出二进制文件中存储clang编译时标志