gpt4 book ai didi

c++ - 序列化包含指针 vector 的对象 vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:15 25 4
gpt4 key购买 nike

我有 3 个类(“Leader”、“Researchers”、“Workers”),它们都派生自基类“Team”。

我有一个“项目”类,其中包含指向不同团队的指针 vector 。

我在所有类声明中按此顺序使用以下所有 header :

#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、Workers 对象:

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 对象的 vector :

{
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;

在问卷类的序列化尝试中。

最佳答案

如 n.m. 的链接所示:您需要向 Boost 注册这些类,以便它在序列化时知道哪些类是什么。

您需要为“Project”序列化的每个类添加以下行:

ar.template register_type<ClassName>() ; //ClassName = Team etc

关于c++ - 序列化包含指针 vector 的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17640045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com