c++ - Boost::serialize - 反序列化对象 vector ?

标签 c++ serialization boost

我最近想序列化一个包含对象 vector 的类。我在文档中读到,如果我包含#include ,我将能够使用一个简单的 & 运算符来完成它。不幸的是,尽管编译器同意构建序列化代码,但它不允许我编译反序列化测试用例。那里可能出了什么问题?

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/vector.hpp>

#include <fstream>

class A
{
        friend class boost::serialization::access;
        template<class Archive>
                void serialize(Archive & ar, const unsigned int version) const
                {
                }
};

class B
{

        friend class boost::serialization::access;

        template<class Archive>
                void serialize(Archive & ar, const unsigned int version) const
                {
                        ar & a;
                }

        std::vector<A> a;
};

int main()
{
        std::ifstream ifs("filename");
        boost::archive::text_iarchive ia(ifs);
        B b;
        ia >> b;

}

以下是编译器的错误:

> make testcase
g++ -ggdb -fpermissive    testcase.cpp   -o testcase
In file included from /usr/include/boost/archive/detail/oserializer.hpp:67:0,
                 from /usr/include/boost/archive/detail/interface_oarchive.hpp:23,
                 from /usr/include/boost/archive/detail/common_oarchive.hpp:22,
                 from /usr/include/boost/archive/basic_text_oarchive.hpp:32,
                 from /usr/include/boost/archive/text_oarchive.hpp:31,
                 from testcase.cpp:1:
/usr/include/boost/archive/detail/check.hpp: In instantiation of ‘void boost::archive::detail::check_const_loading() [with T = const std::vector<A>]’:
/usr/include/boost/archive/detail/iserializer.hpp:577:5:   required from ‘void boost::archive::load(Archive&, T&) [with Archive = boost::archive::text_iarchive; T = const std::vector<A>]’
/usr/include/boost/archive/detail/common_iarchive.hpp:66:9:   required from ‘void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/basic_text_iarchive.hpp:65:9:   required from ‘void boost::archive::basic_text_iarchive<Archive>::load_override(T&, int) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/text_iarchive.hpp:82:9:   required from ‘void boost::archive::text_iarchive_impl<Archive>::load_override(T&, int) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/detail/interface_iarchive.hpp:60:9:   required from ‘Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/detail/interface_iarchive.hpp:67:35:   [ skipping 9 instantiation contexts ]
/usr/include/boost/archive/detail/iserializer.hpp:592:5:   required from ‘void boost::archive::load(Archive&, T&) [with Archive = boost::archive::text_iarchive; T = B]’
/usr/include/boost/archive/detail/common_iarchive.hpp:66:9:   required from ‘void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = B; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/basic_text_iarchive.hpp:65:9:   required from ‘void boost::archive::basic_text_iarchive<Archive>::load_override(T&, int) [with T = B; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/text_iarchive.hpp:82:9:   required from ‘void boost::archive::text_iarchive_impl<Archive>::load_override(T&, int) [with T = B; Archive = boost::archive::text_iarchive]’
/usr/include/boost/archive/detail/interface_iarchive.hpp:60:9:   required from ‘Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = B; Archive = boost::archive::text_iarchive]’
testcase.cpp:35:8:   required from here
/usr/include/boost/archive/detail/check.hpp:162:1: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’

最佳答案

serialize成员函数不应该是const。它用于序列化,但也用于反序列化。

关于c++ - Boost::serialize - 反序列化对象 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917243/

相关文章:

c++ - C++ 检查关键字是否存在

serialization - jackson 自定义序列化与过滤

c# - 不知道为什么我的类无法连载

c++ - 将 boost 间隔扩展到标量乘法

c++ - 将 gsl_ran_hypergeometric_pdf(k, n1, n2, t) 翻译成 boost::math::hypergeometric_distribution

c++ - 如何最小化结构类型的内存使用?

c++ - 整数和 float 之间的加法......结果为零

c++ - 在重新定义变量之前从外部作用域访问变量是否定义良好?

c# - 扩展 Protocol Buffer 以使用现有协议(protocol)?

c++ - interval_map boost 库