提升序列化/反序列化存档"stream error"异常

Boost serialization/deserialization archive "stream error" exception

本文关键字:stream error 异常 升序 序列化 反序列化      更新时间:2023-10-16

我有以下问题。

我有一个名为 A.h 的文件和一个名为 B.h 的文件,每个文件都包含如下结构:(两个类中的结构不同)

struct Base
{
    friend class access;
    template <typename Archive>
    void serialize(Archive& ar,const unsigned int version)
    {
        ar & fieldLength;
        ar & fieldMD;
        ar & fieldTime_Stamp;
    }   
   public:
        unsigned int fieldLength;
        unsigned int fieldMD;
        unsigned int fieldTime_Stamp;
       virtual void f(){} //to be polymorphic the struct
};
struct Derived:public Base
{
    ...
}

所以我以经典的方式序列化结构:

....
std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive.register_type(static_cast<Derived*>(NULL))
archive <<p;   // where p is a pointer to Base

现在的问题...在反序列化方面,我遵循相同的(反向)过程......如果我单独反序列化 A.h 中的结构(不包括在项目 B.h 中)和 B.h 中的结构(不包括在项目 A.h 中)都有效......但是如果我在项目中都包含这两个类,则反序列化适用于一个类,但在指令"archive>> m;"中为另一个类抛出"流错误异常"......似乎注册类或类似的东西发生了冲突......有什么想法吗?谢谢...

是否已序列化派生类序列化函数中的基本数据?

ar & boost::serialization::make_nvp( "base", boost::serialization::base_object< Base >( *this ) );

我不知道这是否有帮助,但我使用

BOOST_CLASS_IMPLEMENTATION(x, boost::serialization::object_serializable);
BOOST_CLASS_TRACKING(x, boost::serialization::track_never)

将类注册为可序列化。希望有帮助:3