gpt4 book ai didi

c++ - 在C++中将类(带有Vector成员)另存为二进制文件

转载 作者:行者123 更新时间:2023-12-02 10:05:31 24 4
gpt4 key购买 nike

我正在尝试使用二进制文件保存和加载类Student。这些类是这样的:

class Student{
char name[100];
int regno;
vector<Subjects> subjects;
};

class Subjects{
char initial;
int id;
};

我以这种方式保存和加载:
void saveFile(){
fstream f1;
f1.open("data.bin", ios::out | ios::binary);
f1.write((char*)&student, sizeof(Student));
f1.close();
}

void loadFile(){
fstream f1;
f1.open("data.bin", ios::in | ios::binary);
f1.read((char*)&student, sizeof(Student));
f1.close();
}

保存和加载没有什么花哨的地方,但是我通过print语句进行了测试,它是 vector 组件,在终端 (cmd.exe)中运行它时会导致崩溃。

最佳答案

您不能简单地保存和加载对象,除非在将Student对象保存到文件之前对其进行序列化。

原理:
Student类不是POD类型。您的std::vector<Subjects>类中的Student只是持有一个指向底层存储的指针,该底层存储着Subjects,因为vector使用堆来保存其内容。将对象保存到文件时,只需将指针与Student对象一起保存,而不是实际数据。因此,当您尝试从已保存的二进制数据重新创建同一对象时,您仅可以访问内存地址,而不是实际内容。

在C++世界中,boost::serializationProtocol bufferscereal最知名(但不限于)序列化库来实现您要执行的操作。

关于c++ - 在C++中将类(带有Vector成员)另存为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60339211/

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