C++ 使用boost序列化多态类

C++ 使用boost序列化多态类,c++,c++11,serialization,boost,C++,C++11,Serialization,Boost,当我尝试序列化球体是几何体的子类的数据时,程序崩溃,出现未处理的异常 Serialization.exe中的0x000 000 0FEFCA0B8D抛出异常:微软C++异常:Booo:::存档:存储位置0x000,000,90022F730 异常 这发生在这一行“ar&g;” 包括“pch.h” #包括 #包括 #包括 #包括 #包括“Geometry.h” #包括“Sphere.h” #包括 int main() { const char*fileName=“saved.txt”; 球形Sp

当我尝试序列化球体是几何体的子类的数据时,程序崩溃,出现未处理的异常

Serialization.exe中的0x000 000 0FEFCA0B8D抛出异常:微软C++异常:Booo:::存档:存储位置0x000,000,90022F730

异常 这发生在这一行“ar&g;”

包括“pch.h”
#包括
#包括
#包括
#包括
#包括“Geometry.h”
#包括“Sphere.h”
#包括
int main()
{
const char*fileName=“saved.txt”;
球形Sph;
几何图形*g=&Sph;
//保存数据
{
//创建输出存档
std::ofs流(文件名);
boost::archive::text\u oarchive ar(ofs);
ar&g;//此行引发异常。
}
几何图形*c_恢复;
//加载数据
{
//创建一个输入流
std::ifstream ifs(文件名);
boost::archive::text\u iarchive ar(ifs);
恢复ar&cU;
}
c_已还原->PrintGeom();
做
{

当我编译并运行显示的代码时,异常文本是

unregistered class - derived class not registered or exported
因此,潜在的问题是您需要按照概述注册派生类

BOOST_CLASS_EXPORT_GUID(Sphere, "Sphere")

恰好发布了这个答案,这是一个复杂程度不同的示例宝库-包含的顺序和导出宏的位置有很多微妙之处(例如,在分离翻译单元时):
#include <string>
#include <boost/serialization/split_member.hpp>
#include <boost/serialization/base_object.hpp>

class Geometry
{
private:
    std::string stdstringGeom;

public:
     virtual void  PrintGeom()
    {
        std::cout << "geometry virtual function";
    }

private:

    friend class boost::serialization::access;


    template <typename Archive>
    void save(Archive& ar, const unsigned version) const {
        ar & stdstringGeom;
    }

    template <typename Archive>
    void load(Archive& ar, const unsigned version) {
        ar & stdstringGeom;
    }


    BOOST_SERIALIZATION_SPLIT_MEMBER()
};
unregistered class - derived class not registered or exported
BOOST_CLASS_EXPORT_GUID(Sphere, "Sphere")