C++;使用用户定义对象读取/写入数据 我是C++初学者,我有这样的代码 #include <vector> #include <fstream> #include <iostream> using namespace std; class Role { public: Role(int r, bool x) :role(r), active(x) {} private: int role; bool active; }; class Test { public: Test(vector<Role> xxxx = {}) :xxx(xxxx) {} private: std::vector<Role> xxx; }; int main() { vector<Role> role = { Role(1,true),Role(2,false),Role(3, true) }; Test test1(role); fstream dataTransfer("data.txt"); Test test2; dataTransfer.write(reinterpret_cast<char*>(&test1), sizeof(Test)); dataTransfer.read(reinterpret_cast<char*>(&test2), sizeof(Test)); // error return 0; } #包括 #包括 #包括 使用名称空间std; 阶级角色 { 公众: 角色(int r,bool x) :角色(r),活动(x) {} 私人: 智力角色; 布尔活跃; }; 课堂测试 { 公众: 测试(向量xxxx={}) :xxx(xxxx) {} 私人: std::向量xxx; }; int main() { 向量角色={role(1,true),role(2,false),role(3,true)}; 测试1(角色); fstream数据传输(“data.txt”); 测试2; dataTransfer.write(reinterpret_cast(&test1),sizeof(Test)); dataTransfer.read(reinterpret_cast(&test2),sizeof(Test));//错误 返回0; }

C++;使用用户定义对象读取/写入数据 我是C++初学者,我有这样的代码 #include <vector> #include <fstream> #include <iostream> using namespace std; class Role { public: Role(int r, bool x) :role(r), active(x) {} private: int role; bool active; }; class Test { public: Test(vector<Role> xxxx = {}) :xxx(xxxx) {} private: std::vector<Role> xxx; }; int main() { vector<Role> role = { Role(1,true),Role(2,false),Role(3, true) }; Test test1(role); fstream dataTransfer("data.txt"); Test test2; dataTransfer.write(reinterpret_cast<char*>(&test1), sizeof(Test)); dataTransfer.read(reinterpret_cast<char*>(&test2), sizeof(Test)); // error return 0; } #包括 #包括 #包括 使用名称空间std; 阶级角色 { 公众: 角色(int r,bool x) :角色(r),活动(x) {} 私人: 智力角色; 布尔活跃; }; 课堂测试 { 公众: 测试(向量xxxx={}) :xxx(xxxx) {} 私人: std::向量xxx; }; int main() { 向量角色={role(1,true),role(2,false),role(3,true)}; 测试1(角色); fstream数据传输(“data.txt”); 测试2; dataTransfer.write(reinterpret_cast(&test1),sizeof(Test)); dataTransfer.read(reinterpret_cast(&test2),sizeof(Test));//错误 返回0; },c++,vector,fstream,C++,Vector,Fstream,此代码导致“读取访问冲突”,但我找不到任何错误。 感谢您的帮助重新解释\u cast是一种非常糟糕的序列化对象的方法。sizeof(Test)是一个编译时常量,它以字节为单位给出了测试结构的大小。您将震惊地发现,无论其xxx成员(向量)包含一个值还是一百万个值,结构的大小都是相同的。显然,您应该明白,无论向量有一个值还是一百万个值,尝试向文件写入相同数量的字节是没有意义的。考虑到这一点,您的bug应该变得非常明显感谢您的帮助@SamVarshavchik。在这种情况下,如何写入/读取文件?您需要

此代码导致“读取访问冲突”,但我找不到任何错误。
感谢您的帮助

重新解释\u cast
是一种非常糟糕的序列化对象的方法。
sizeof(Test)
是一个编译时常量,它以字节为单位给出了
测试
结构的大小。您将震惊地发现,无论其
xxx
成员(向量)包含一个值还是一百万个值,结构的大小都是相同的。显然,您应该明白,无论向量有一个值还是一百万个值,尝试向文件写入相同数量的字节是没有意义的。考虑到这一点,您的bug应该变得非常明显感谢您的帮助@SamVarshavchik。在这种情况下,如何写入/读取文件?您需要编写自己的序列化函数,该函数首先将向量的元素数写入文件,然后将向量的内容写入。