【发布时间】:2013-07-12 11:30:37
【问题描述】:
我有 3 个类(“Leader”、“Researchers”、“Workers”),它们都派生自一个基类“Team”。
我有一个“项目”类,其中包含指向不同团队的指针向量。
我在所有类声明中按此顺序使用以下所有标头:
#include <sstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/export.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/split_member.hpp>
要(反)序列化我使用的 Team 对象:
private:
friend class boost::serialization::access ;
template <typename Archive>
void serialize(Archive& ar, const unsigned int /*version*/)
{
ar & teamname ;
}
要(反)序列化我使用的 Leader、Researchers、Worker 对象:
typedef Team _super;
friend class boost::serialization::access ;
template <typename Archive>
void serialize(Archive& ar, const unsigned int /*version*/)
{
ar & boost::serialization::base_object<_super>(*this) ;
ar & contactTelephoneNumber ;
}
该项目包含一个指向不同团队的指针的 std::vector 和一个字符串,使用:
std::vector<Team *> teams ;
std::string note ;
我在Project类中使用如下代码进行序列化:
private:
friend class boost::serialization::access ;
template <typename Archive>
void serialize(Archive& ar, const unsigned int /*version*/)
{
//ar & BOOST_SERIALIZATION_NVP(teams) ; //ERROR OCCURS HERE
ar & teams;
ar & note ;
}
并在我使用的 main 中序列化 Project 对象的向量:
{
std::ostringstream archiveStream ;
boost::archive::text_oarchive archive(archiveStream) ;
archive << BOOST_SERIALIZATION_NVP(projects) ;
//Get serialized info as string
archivedProjects = archiveStream.str() ;
}
这一切都编译得很好。问题在于运行时。到达上述代码部分时,出现以下错误:
terminate called after throwing an instance of 'boost::archive::archive_exception'
what():
unregistered class - derevided class not registered or exported"
该程序达到:
ar & teams;
在问卷调查类的序列化尝试中。
【问题讨论】:
-
您具体在哪一行得到异常?
-
@Sankalp :
ar & teams;在 Questionnaire 类的序列化尝试中。 -
现在将开始阅读@n.m。 ty
-
@n.m. - 我读了你提到的部分(我承认我没有读那么远)。如果您将其设置为答案,我会将其标记为答案。非常感谢您的链接,您为我节省了数小时的乐趣
标签: c++ serialization boost boost-serialization