2016-05-31 59 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。

现在它像一个魅力,