Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;Boost-包含类层次结构对象的类的序列化_C++_Serialization_Boost - Fatal编程技术网

C++ C++;Boost-包含类层次结构对象的类的序列化

C++ C++;Boost-包含类层次结构对象的类的序列化,c++,serialization,boost,C++,Serialization,Boost,我有一个类a,它包含类B的对象,我想序列化它。问题是,类C继承自B,因此A可以包含B或C的对象。如何使用Boost有效地实现序列化 下面是我的尝试,但我在尝试使用C对象序列化A时遇到了错误,而使用B它工作正常。你知道吗,我做错了什么 我找到了一些关于类层次结构对象序列化的信息,但是它需要在text\u iarchive中显式注册类型,而我需要在A类中注册它,因为我没有直接序列化B对象 我的尝试: 这表明您错过了派生类的BOOST\u CLASS\u EXPORT,即 BOOST_CLASS_E

我有一个类
a
,它包含类
B
的对象,我想序列化它。问题是,类
C
继承自
B
,因此
A
可以包含
B
C
的对象。如何使用Boost有效地实现序列化

下面是我的尝试,但我在尝试使用
C
对象序列化
A
时遇到了错误,而使用
B
它工作正常。你知道吗,我做错了什么

我找到了一些关于类层次结构对象序列化的信息,但是它需要在
text\u iarchive
中显式注册类型,而我需要在
A
类中注册它,因为我没有直接序列化
B
对象


我的尝试:
这表明您错过了派生类的
BOOST\u CLASS\u EXPORT
,即

BOOST_CLASS_EXPORT(C)
没有此宏,Boost序列化无法正确序列化指向派生对象的指针


你可以找到完整的工作代码

可能在@leiyc中得到解决。不是的,你发布的问题是关于抽象类的,但是我的
B
类是可实例化的。这个怎么样@Eenoku,在米拉达姆的暗示下工作。请你写一个完整的答案,这样我就可以接受了?
a:
4
1
2
3
a2:
4
1
2
3
a3:
6
1
2
3
2
terminate called after throwing an instance of 'boost::archive::archive_exception'
  what():  unregistered class - derived class not registered or exported
Signal: SIGABRT (Aborted)
BOOST_CLASS_EXPORT(C)