gpt4 book ai didi

c++ - 使用 boost 序列化多态类

转载 作者:行者123 更新时间:2023-11-30 03:14:18 24 4
gpt4 key购买 nike

当我尝试对 Sphere 是几何子类的数据进行序列化时,程序因未处理的异常而崩溃。

在 Serialization.exe 中的 0x000007FEFCA0B87D 抛出异常:Microsoft C++ 异常:内存位置 0x000000000022F730 处的 boost::archive::archive_exception

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

include "pch.h"
#include <iostream>
#include<fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include "Geometry.h"
#include "Sphere.h"
#include <boost/serialization/export.hpp>


int main()
{
const char* fileName = "saved.txt";

Sphere Sph;
Geometry* g = &Sph;

// save data
{
// Create an output archive
std::ofstream ofs(fileName);
boost::archive::text_oarchive ar(ofs);
ar & g ; // This lines throws exception.
}
Geometry* c_Restored;
//load data
{
// create an input stream
std::ifstream ifs(fileName);
boost::archive::text_iarchive ar(ifs);
ar & c_Restored;
}


c_Restored->PrintGeom();

do
{
std::cout << '\n' << "Press a key to continue...";
} while (std::cin.get() != '\n');
}

/////////////////////////////////////////////////////////////////

#include "Geometry.h"
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/export.hpp>




class Sphere : public Geometry
{
private:
std::string stdstrSphere;


public:
Sphere() : stdstrSphere( "DefaultSphere"){}
Sphere( std::string str) : stdstrSphere(str) {}
void PrintGeom()
{
std::cout << "Sphere Virtual Function" << std::endl;
}

private:
typedef Geometry _Super;
friend class boost::serialization::access;


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

boost::serialization::base_object<_Super>(*this);
ar & stdstrSphere;
}

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

boost::serialization::base_object<_Super>(*this);
ar & stdstrSphere;
}

BOOST_SERIALIZATION_SPLIT_MEMBER()



};

///////////////////////////////////////////////////////////////////////// #pragma一次

#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

所以潜在的问题是您需要按照概述注册您的派生类 here .尝试在 main...

之前添加以下内容
BOOST_CLASS_EXPORT_GUID(Sphere, "Sphere")

关于c++ - 使用 boost 序列化多态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921929/

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