2016-05-31 74 views
0

我有個從像這樣衍生2種多態類型:升壓::序列化和鹼/派生關係尚未註冊

class Base1 {...}; 
class Base2 {...}; 
class Derived1 : public Base1 {...}; 
class Derived : public Derived1, public Base2 {}; 

我使用

BOOST_CLASS_EXPORT_KEY(Derived) 

在序列頭文件的。和

BOOST_CLASS_EXPORT_IMPLEMENT(Derived) 

爲實現Derived的序列化自由函數的翻譯單元,它只爲兩個基地調用base_object。我爲Base1,Base2,Derived1的NONE做了這個。 我只是實例化boost :: mpi所需檔案的序列化函數。 所有這些都在鏈接到的共享對象中以生成可執行文件。

當我使用Base1 *指針時,保存到存檔失敗。

調試時,我看到

boost/archive/detail/oserializer.hpp 

,圍繞線393,派生類型正確註冊,但例外是在411只是一點點後扔在那裏說

"the base/derived relationship hasn't be registered" 

並且例外顯示類型

Derived 

Base1 

我該如何註冊關係本身?

回答

0

道歉,我實際上錯過了在Derived1的serialize實現中調用base_object。

現在它像一個魅力,