我正在学习使用boost来在C ++中对我的一些类进行序列化。
我在界面中有一个结构。我使用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):错误C2027:使用未定义类型'boost :: STATIC_ASSERTION_FAILURE' 同 [ X =假 ]
C:\ Users \ boost1470_win64_vc90sp1 \ include \ boost / archive / detail / iserializer.hpp(577):参见函数模板实例化'void boost :: archive :: detail :: check_const_loading(void)'正在编译 同 [ T = const Long
C:\ Users \ interfaces / Interface.h(12):参见函数模板实例化'Archive&amp; boost :: archive :: detail :: interface_iarchive :: operator&amp;(T&amp;)'被编译 同 [ 存档=提振::档案:: text_iarchive, T =常数长 ]
C:\ Users \ interfaces / Interface.h(17):参见类模板实例化'boost :: archive :: detail :: extra_detail :: guid_initializer'正在编译 同 [ T = X ]
知道出了什么问题。我是新手,可以提升并弄清楚它是如何运作的。
注意:如果我在struct中使用int而不是long,我没有看到boost :: STATIC_ASSERTION_FAILURE错误。
答案 0 :(得分:1)
澄清上述评论
struct X {
const Long rate;
}
是问题,一旦X被实例化,rate被设置为常量值,并且boost不能改变它。相反,如果它读取
struct X {
Long rate;
}
您的代码是否有效?