尝试从文件中读取向量时出错 我是C++初学者,我编写了这个代码来测试我是否可以把向量写到二进制文件中,然后从文件中读取向量。 代码如下: vector <student> stud; vector <student> temp; void makeObj (string name, int age) { student newstudent (nam, ag); stud.push_back(newstudent); } int main () { makeObj("kwame", 14); stud[0].print(); makeObj("kojo", 12); stud[1].print(); makeObj("kwabena", 7); stud[2].print(); fstream gameSave ("gameSaveFile.txt", ios::binary | ios::out | ios::in); gameSave.write( (char *) &stud, sizeof(stud)); gameSave.seekg(0); gameSave.read( (char *) &temp, sizeof(stud)); temp[0].print(); gameSave.close(); return 0; } 矢量螺柱; 向量温度; void makeObj(字符串名,整数) { 学生新闻学生(nam,ag); 螺柱。推回(newstudent); } int main() { makeObj(“kwame”,14); 螺柱[0]。打印(); makeObj(“kojo”,12); 螺柱[1]。打印(); makeObj(“kwabena”,7); 螺柱[2]。打印(); fstream gameSave(“gameSaveFile.txt”,ios::binary | ios::out | ios::in); gameSave.write((char*)&stud,sizeof(stud)); gameSave.seekg(0); gameSave.read((char*)和temp,sizeof(stud)); 温度[0]。打印(); gameSave.close(); 返回0; }
当我运行代码时,程序运行时会出现未知错误,我无法确定这是什么错误。起初我认为这可能是演员的错误。所以我决定像这样使用reinterpret\u cast来转换向量:尝试从文件中读取向量时出错 我是C++初学者,我编写了这个代码来测试我是否可以把向量写到二进制文件中,然后从文件中读取向量。 代码如下: vector <student> stud; vector <student> temp; void makeObj (string name, int age) { student newstudent (nam, ag); stud.push_back(newstudent); } int main () { makeObj("kwame", 14); stud[0].print(); makeObj("kojo", 12); stud[1].print(); makeObj("kwabena", 7); stud[2].print(); fstream gameSave ("gameSaveFile.txt", ios::binary | ios::out | ios::in); gameSave.write( (char *) &stud, sizeof(stud)); gameSave.seekg(0); gameSave.read( (char *) &temp, sizeof(stud)); temp[0].print(); gameSave.close(); return 0; } 矢量螺柱; 向量温度; void makeObj(字符串名,整数) { 学生新闻学生(nam,ag); 螺柱。推回(newstudent); } int main() { makeObj(“kwame”,14); 螺柱[0]。打印(); makeObj(“kojo”,12); 螺柱[1]。打印(); makeObj(“kwabena”,7); 螺柱[2]。打印(); fstream gameSave(“gameSaveFile.txt”,ios::binary | ios::out | ios::in); gameSave.write((char*)&stud,sizeof(stud)); gameSave.seekg(0); gameSave.read((char*)和temp,sizeof(stud)); 温度[0]。打印(); gameSave.close(); 返回0; },c++,file,vector,casting,C++,File,Vector,Casting,当我运行代码时,程序运行时会出现未知错误,我无法确定这是什么错误。起初我认为这可能是演员的错误。所以我决定像这样使用reinterpret\u cast来转换向量:reinterpret\u cast(&stud),但这并没有解决问题。但是,当我只是将向量写入文件而不尝试读取它时,代码成功运行,没有任何错误 当我试图读取向量时,有人知道是什么导致了代码中的错误吗?我也会犯这样的错误。 什么是正确的方法,我可以从文件中写入和读取向量而不会出现任何错误。一个二进制文件,如果它只不过是一个字节序列。另
reinterpret\u cast(&stud)
,但这并没有解决问题。但是,当我只是将向量写入文件而不尝试读取它时,代码成功运行,没有任何错误
当我试图读取向量时,有人知道是什么导致了代码中的错误吗?我也会犯这样的错误。
什么是正确的方法,我可以从文件中写入和读取向量而不会出现任何错误。一个二进制文件,如果它只不过是一个字节序列。另一方面,学生向量是一个内部使用指针的复杂对象:该向量有一个指向其内部数组开头的指针,由于学生似乎有一个字符串属性,每个学生对象都有一个指向内部字符数组的指针 您不能指望仅仅编写向量的顶层部分就足够了。您需要的是序列化,这意味着复杂对象和字节序列之间的转换(双向) 向量通常通过以下方式序列化(以二进制形式):
- 长度的整数(*)
- 向量的每个元素的序列化形式(n项)
student
类的确切定义,我无法说出它的序列化形式
(*)在这个简单的示例中,我假设您将在编写文件的相同体系结构中读取该文件。如果您希望序列化表单能够跨不同的体系结构移植,则需要考虑整数大小(4字节或…)和endianness。但我想这将是另一个问题。sizeof(stud)
只显示向量在堆栈中所占的大小,仅此而已。此外,向量的指针不同于其内部数据的指针。您必须使用类似以下的代码来缓存内部数据的指针stud.data()
。我认为没有办法将一个向量的内部指针设置到另一个向量,所以当然你不能得到一个向量的数据指针并将它分配到另一个向量。我认为您可以使用如下代码在向量中写入数据(如果学生
类中没有任何指针:
gameSave.write((char*)stud.data(), stud.size() * sizeof(student)); // It just write your data not member variables of vecto
一般来说,你需要序列化来完成这项工作。如果你给你的类提供详细的帮助,可能会有更多的帮助。但我建议先对一个简单的类型(如
int
)进行序列化,然后根据你的情况进行扩展。我是个初学者,所以我对序列化不太了解。你能给我一段代码,让我看看我是如何完成的吗能用它来帮助我成功地阅读向量吗?谢谢