這些方法應該保存並加載它們關聯的對象的整體。當我通過gcc在Linux下編譯程序時,保存似乎工作,但在加載時發生段錯誤。當我通過Visual Studio編譯器在Windows下編譯它時,它的工作方式就像是一場夢。我不確定這些差異是什麼,但我有一種預感,它涉及一些海灣合作委員會的古怪事物。GCC下的對象加載段錯誤
兩種方法:
void User::SaveToFile()
{
ofstream outFile;
string datafile_name = username + "_data";
outFile.open(datafile_name.c_str(), ios::binary);
outFile.write((char*)this, sizeof(*this));
}
void User::LoadFromFile(string filename)
{
ifstream inFile;
inFile.open(filename.c_str(), ios::binary);
inFile.read((char*)this, sizeof(*this));
}
聲明:
class User
{
private:
string username;
string realname;
string password;
string hint;
double gpa;
vector<Course> courses;
public:
double PredictGPA();
void ChangePassword();
void SaveToFile();
void LoadFromFile(string filename);
void SetUsername(string _username){username = _username;}
string GetUsername(){return username;}
void SetRealname(string _realname){realname = _realname;}
string GetRealname(){return realname;}
void SetPass(string _password){password = _password;}
string GetPass(){return password;}
void SetHint(string _hint){hint = _hint;}
string GetHint(){return hint;}
};
是'User'一個POD類型?它是否具有與gcc和vc相同的內存佈局? –
請給出類聲明 –
可能不是海灣合作委員會的「怪異」,但你做出的一些假設並不成立。看着廣泛的鑄造濫用,這似乎是可能的!無論如何,只要注意「二進制序列化」是100%不可移植的,你應該看看基於文本的序列化,除非你有一個非常好的理由不要。 –