2015-03-03 45 views
0

我試圖調試使用Boost序列化實現的保存/加載功能,但它不起作用。我創辦這個問題是由類瓷磚造成的:序列化函數不叫

class tile : public game_object { 
... 
friend class boost::serialization::access; 
template <class Archive> 
void serialization(Archive ar &, const unsigned int version) 
{ 
    throw new std::exception; //I expect this will be thrown when serializing, but it isn't 
    ar & boost::serialization::base_object<game_object>(*this); 
    ... 
} 

保存歸檔:從歸檔

boost::archive::text_oarchive archive(...); 
tile t = ...; 
archive << t; 

加載:

boost::archive::text_iarchive archive(...); 
tile t; 
archive >> t; 

的問題是,從類瓷磚的數據成員不在類game_object中的不會保存和加載。函數tile :: serialize從不被調用,但函數game_object :: serialize被調用。

感謝您的幫助和對我的英語感到抱歉。

+0

你怎麼知道它不被拋出?你抓到了'std :: exception *'嗎?因爲在'throw'中使用'new'非常奇怪C++ – sehe 2015-03-03 10:34:51

+0

不,我沒有收到任何東西,但我認爲它會終止程序。但這個例外並不重要。關鍵是,tile :: serialize中的代碼不會被執行。而且我知道這一點,因爲我也有記錄到文件,這是沒有執行和斷點,這是沒有觸發。 – user1361164 2015-03-03 11:13:06

+0

我知道這一點。我只是檢查事實,因爲你的問題在細節上很低。你爲什麼不創建一個SSCCE?我們可能能夠爲您解決它...(然後,瀏覽現有的答案應該會給你這個信息) – sehe 2015-03-03 11:22:22

回答

1

我發現了這個問題。序列化的方法應該被稱爲「序列化」而不是「序列化」。

+0

好點。我記得曾經做過類似的事情。基類序列化踢得很難(所以沒有錯誤結果)。與SSCCE,我不會錯過它:) – sehe 2015-03-03 13:57:15