2013-07-14 49 views
1

我有3個類(「領導」,「研究人員」,「工人」),它們都來自基類「團隊」。序列化包含指針向量的對象向量

我有一個類「Project」,其中包含指向不同團隊的指針向量。

我用下面所有的標題,在這個秩序,我所有的類聲明:

#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 ; 
    } 

要(德)序列化的領導者,研究者,工作者對象我使用:

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 ::矢量不同的團隊,使用的字符串:

std::vector<Team *> teams ; 
std::string note ; 

我用下面的代碼在項目類系列化:

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

和序列化項目對象的載體,主要使用:

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

在問卷調查類的序列化的嘗試。

+0

在哪一行,你特別得到異常? – Sankalp

+0

http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/serialization.html#registration –

+0

@Sankalp:在'問卷調查**類的序列化嘗試中''ar&teams;'。 –

回答

1

正如在n.m.的鏈接中:您需要使用Boost註冊這些類,以便在序列化時知道哪些類是什麼類。

您需要添加下面這行,其中每一個「項目」序列化類:

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