名称=名称; 该->台车号=台车号; } void setname(字符串名称){ 此->名称=名称; } 字符串getname(){ 返回名称; } 无效设置电车号(双电车号){ 该->台车号=台车号; } double gettrolleynumber(){ 返回台车编号; } }; int main(){ 字符串名; 双倍trl_num; 信实商业[3]; RelianceMart obj; //流fout(“PersistentStorage.txt”); /* 对于(int i=0;i>name; cin>>trl_num; mart[i]=RelianceMart(名称,trl_num); fout.write((char*)&mart[i],sizeof(mart[i]); } fout.close(); */ ifstream fin(“PersistentStorage.txt”); 而(!fin.eof()){ fin.read((字符*)和obj,sizeof(obj)); cout,c++,fstream,ifstream,ofstream,C++,Fstream,Ifstream,Ofstream" /> 名称=名称; 该->台车号=台车号; } void setname(字符串名称){ 此->名称=名称; } 字符串getname(){ 返回名称; } 无效设置电车号(双电车号){ 该->台车号=台车号; } double gettrolleynumber(){ 返回台车编号; } }; int main(){ 字符串名; 双倍trl_num; 信实商业[3]; RelianceMart obj; //流fout(“PersistentStorage.txt”); /* 对于(int i=0;i>name; cin>>trl_num; mart[i]=RelianceMart(名称,trl_num); fout.write((char*)&mart[i],sizeof(mart[i]); } fout.close(); */ ifstream fin(“PersistentStorage.txt”); 而(!fin.eof()){ fin.read((字符*)和obj,sizeof(obj)); cout,c++,fstream,ifstream,ofstream,C++,Fstream,Ifstream,Ofstream" />

在c+中读取/写入文件+; 我试图在C++中对对象进行读写,编写对象工作精细,阅读给出了分割内核转储。我已经对将对象写入文件的代码进行了注释,在编写过程中,我们可以取消对该部分的注释,并对读取部分进行注释 #include<iostream> #include<fstream> #include<string> using namespace std; class RelianceMart{ string name; double trolley_number; public: RelianceMart(){ name = "NA"; trolley_number = 0; } RelianceMart(string name, double trolley_number){ this->name = name; this->trolley_number = trolley_number; } void setname(string name){ this->name = name; } string getname(){ return name; } void settrolleynumber(double trolley_number){ this->trolley_number = trolley_number; } double gettrolleynumber(){ return trolley_number; } }; int main(){ string name; double trl_num; RelianceMart mart[3]; RelianceMart obj; // ofstream fout("PersistentStorage.txt"); /* for(int i=0;i<3;i++){ cin>>name; cin>>trl_num; mart[i] = RelianceMart(name, trl_num); fout.write((char *) & mart[i], sizeof(mart[i])); } fout.close(); */ ifstream fin("PersistentStorage.txt"); while(!fin.eof()){ fin.read((char *) & obj,sizeof(obj)); cout<< obj.getname(); } fin.close(); return 0; } #包括 #包括 #包括 使用名称空间std; 类信赖智能{ 字符串名; 双轨电车号码; 公众: RelianceMart(){ name=“NA”; 台车编号=0; } RelianceSmart(字符串名称,双小车编号){ 此->名称=名称; 该->台车号=台车号; } void setname(字符串名称){ 此->名称=名称; } 字符串getname(){ 返回名称; } 无效设置电车号(双电车号){ 该->台车号=台车号; } double gettrolleynumber(){ 返回台车编号; } }; int main(){ 字符串名; 双倍trl_num; 信实商业[3]; RelianceMart obj; //流fout(“PersistentStorage.txt”); /* 对于(int i=0;i>name; cin>>trl_num; mart[i]=RelianceMart(名称,trl_num); fout.write((char*)&mart[i],sizeof(mart[i]); } fout.close(); */ ifstream fin(“PersistentStorage.txt”); 而(!fin.eof()){ fin.read((字符*)和obj,sizeof(obj)); cout

在c+中读取/写入文件+; 我试图在C++中对对象进行读写,编写对象工作精细,阅读给出了分割内核转储。我已经对将对象写入文件的代码进行了注释,在编写过程中,我们可以取消对该部分的注释,并对读取部分进行注释 #include<iostream> #include<fstream> #include<string> using namespace std; class RelianceMart{ string name; double trolley_number; public: RelianceMart(){ name = "NA"; trolley_number = 0; } RelianceMart(string name, double trolley_number){ this->name = name; this->trolley_number = trolley_number; } void setname(string name){ this->name = name; } string getname(){ return name; } void settrolleynumber(double trolley_number){ this->trolley_number = trolley_number; } double gettrolleynumber(){ return trolley_number; } }; int main(){ string name; double trl_num; RelianceMart mart[3]; RelianceMart obj; // ofstream fout("PersistentStorage.txt"); /* for(int i=0;i<3;i++){ cin>>name; cin>>trl_num; mart[i] = RelianceMart(name, trl_num); fout.write((char *) & mart[i], sizeof(mart[i])); } fout.close(); */ ifstream fin("PersistentStorage.txt"); while(!fin.eof()){ fin.read((char *) & obj,sizeof(obj)); cout<< obj.getname(); } fin.close(); return 0; } #包括 #包括 #包括 使用名称空间std; 类信赖智能{ 字符串名; 双轨电车号码; 公众: RelianceMart(){ name=“NA”; 台车编号=0; } RelianceSmart(字符串名称,双小车编号){ 此->名称=名称; 该->台车号=台车号; } void setname(字符串名称){ 此->名称=名称; } 字符串getname(){ 返回名称; } 无效设置电车号(双电车号){ 该->台车号=台车号; } double gettrolleynumber(){ 返回台车编号; } }; int main(){ 字符串名; 双倍trl_num; 信实商业[3]; RelianceMart obj; //流fout(“PersistentStorage.txt”); /* 对于(int i=0;i>name; cin>>trl_num; mart[i]=RelianceMart(名称,trl_num); fout.write((char*)&mart[i],sizeof(mart[i]); } fout.close(); */ ifstream fin(“PersistentStorage.txt”); 而(!fin.eof()){ fin.read((字符*)和obj,sizeof(obj)); cout,c++,fstream,ifstream,ofstream,C++,Fstream,Ifstream,Ofstream,std::string的成员实际上只是长度的成员变量,而成员变量是指向实际字符串内容的指针 指针是私有的,并且对于所有现代受保护的多任务操作系统中的特定进程是唯一的,没有其他进程(即使是从同一程序启动的进程)可以重用同一指针 当您写入RelianceMart对象时,您将namestring对象的指针写入文件。如上所述,没有其他进程可以使用此指针,因此无法读取文件 此外当您尝试读取原始对象时,您读取的原始数据覆盖了构造对象中的现有数据,并且该对象将不再正确构造 您也没有以二进制模式打开文件,这是错

std::string的成员实际上只是长度的成员变量,而成员变量是指向实际字符串内容的指针

指针是私有的,并且对于所有现代受保护的多任务操作系统中的特定进程是唯一的,没有其他进程(即使是从同一程序启动的进程)可以重用同一指针

当您写入
RelianceMart
对象时,您将
name
string对象的指针写入文件。如上所述,没有其他进程可以使用此指针,因此无法读取文件

此外当您尝试读取原始对象时,您读取的原始数据覆盖了构造对象中的现有数据,并且该对象将不再正确构造

您也没有以二进制模式打开文件,这是错误的,因为您写入和读取的是原始二进制数据,而不是文本


常用的解决方案是使用,最常用的方法就是重载“输出”和“输入”操作符

在重载函数中,您只需将每个对象作为文本写入和读取,再次使用格式化的
运算符



最后,请阅读

我将使用序列化框架,您可以使用Google的协议缓冲区()。
如果你考虑了一个完整的框架过杀,你可以随时编写你自己的序列化框架,我已经这样做了,我确实用JSON格式来编码对象。< /P>你不能用这种方式序列化一个非POD结构。(你的结构包含一个‘STD::String,因此不是POD)。好的,让我试试不使用字符串,那么它应该可以正常工作了?可能是