我正在学习使用boost来对我的一些C++类进行系列化。Boost序列化给出了未定义的类型'boost :: STATIC_ASSERTION_FAILURE'
我在接口中有一个结构。我使用boost serilaize函数来像这样序列化这个结构体。
Interface.h
struct X {
const Long rate;
}
template <class Archive>
void serialize(Archive& ar, uint32 version)
{
ar & this->rate;
}
BOOST_CLASS_EXPORT(X);
现在,这头将我的主类中使用。让说main.cpp中, 头这个主类有
Main.h
#include "Interface.h"
class Main {
// some stuff
template <class Archive>
void serialize(Archive& ar, uint32 version);
X x;
friend class boost::serialization::access;
};
template <class Archive>
void
Main::serialize(Archive& ar, uint32 version)
{
ar & x;
}
BOOST_CLASS_EXPORT_KEY(Main);
Main.cpp的
BOOST_CLASS_EXPORT_IMPLEMENT(Main);
当我尝试编译此代码我收到以下错误:
C:\ Users \ boost1470_win64_vc90sp1 \ include \ boost/archive/detail/check.hpp(162):error C2027:使用未定义的类型'boost :: STATIC_ASSERTION_FAILURE' [ X =假 ]
C:\用户\ boost1470_win64_vc90sp1 \包括\升压/存档/细节/ iserializer.hpp(577):见参考起作用模板实例“无效的boost ::存档::细节:: check_const_loading(无效) '被编译 与 [ T =常量龙
C:\用户\接口/ Interface.h(12):见参考起作用模板实例' 归档&升压::归档:: detail :: interface_iarchive :: operator &(T &)'正在编译 与 [ 存档=升压::归档:: text_iarchive, T =常量龙 ]
C:\用户\接口/ Interface.h(17):见参考文献类模板实例“升压::归档::详细:: extra_detail :: guid_initializer”正在编译 与 [ T = X ]
任何想法什么错误。我是新的提升和搞清楚这是如何工作的。
注:如果我在结构中使用int而不是long,我看不到boost :: STATIC_ASSERTION_FAILURE错误。
'rate'是const。反序列化如何将其设置为正确的值? –
请不要用“throw”来描述C++编译器错误,在C++中“throw”是指异常,而不是编译器错误。 –
这是通过尝试序列化到需要命名值对的存档产生的典型错误。试试这个代码'ar&make_nvp(“rate”,this-> rate);'。文档:http://www.boost.org/doc/libs/1_59_0/libs/serialization/doc/wrappers.html#nvp,但是尽管Alan的评论很可能是错误('const_cast' * might * 帮帮我)。 – alfC