#include<iostream>
#include<fstream>
using namespace std;
class ok
{
protected:
string name;
int i;
public:
ok(string k="00",int w=0):name(k),i(w){}
void out(){cout <<name<<i;}
};
int main()
{
/* ok o("www",1);
ofstream outfile("1.dat",ios::binary);
outfile.write((char *)&o,sizeof(o));
outfile.close();
*/
ok s;
ifstream infile("1.dat",ios::binary);
infile.read((char *)&s,sizeof(s));
infile.close();
s.out();
return 0;
}
注释部分是第一次用来将数据写进文件的,第一次运行写进文件 然后第二次运行前将其注释掉
运行发现程序停止运行了,但我并不知道为什么,求大神详解
是说从文件里读出来的 string类型的成员变量里内部的记录地址的变量 所被赋的值是指向第一次o这个对象里面的string变量?
追答你说得对。
追问那有什么方法能让那个string内部记录地址的变量 指向本string变量?(或是说怎么改能改正确?)
追答你应该为你所使用的自定义的类都制定Serialize和Deserialize 函数,用于把内存内容写成二进制。比如如果你有一个string类,就把里面的文本内容写入二进制,而不是把string类的成员变量写进去。根据每个自定义类的成员变量量身定制Serialize函数。
追问抱歉,还是没听太懂,能私聊吗?