Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试从文件中读取向量时出错 我是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 - Fatal编程技术网

尝试从文件中读取向量时出错 我是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++初学者,我编写了这个代码来测试我是否可以把向量写到二进制文件中,然后从文件中读取向量。 代码如下: 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来转换向量:
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
)进行序列化,然后根据你的情况进行扩展。

我是个初学者,所以我对序列化不太了解。你能给我一段代码,让我看看我是如何完成的吗能用它来帮助我成功地阅读向量吗?谢谢