Gem klasse i fil
Hej EksperterJeg er ved at lave en klasse, der har i/o metoder til filer.
Følgende kode virker som forventet
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class Foo {
public:
Foo(int _i, string _str) {
i = _i;
str = _str;
}
~Foo(void) {
}
void print(void) {
cout<<"str: " << str <<endl;
cout<<"i : " << i <<endl;
}
void save(void) {
// Gem til fooFile
ofstream outFile("fooFile.dat",ios::binary);
outFile.write((char*)(this), sizeof(Foo));
outFile.close();
}
void load(void) {
// Indlæs fra fooFile
ifstream inFile("fooFile.dat",ios::binary);
inFile.read((char*)(this), sizeof(Foo));
inFile.close();
}
private:
int i;
string str;
};
int main() {
Foo* foo = new Foo(42, "The answer");
Foo* foo2 = new Foo(0, "");
foo->save();
foo2->load();
foo2->print();
return 0;
}
Hvis jeg derimod først kører ovenstående program og fjerner delen af main, der skriver til filen får jeg en segmentation fault. (altså filen der skal læses fra er oprettet) Så main bliver
int main() {
// Foo* foo = new Foo(42, "The answer");
Foo* foo2 = new Foo(0, "");
// foo->save();
foo2->load();
foo2->print();
return 0;
}
Egentligt har jeg 2 spørgsmål
1) Hvorfor virker det første eksempel, men det andet hvor der udelukkende indlæses ikke?
2) Hvad skal rettes til for at det virker?