我正在学习使用boost来将我的一些课程序列化 .
我在界面中有一个结构 . 我使用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);
现在这个 Headers 将由我的主类使用 . 让我们说main.cpp,这个主类的Header有
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 = false]
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&boost :: archive :: detail :: interface_iarchive :: operator&(T&)'正在用[Archive = boost ::编译] archive :: text_iarchive,T = const Long]
C:\ Users \ interfaces / Interface.h(17):参见使用[T = X]编译的类模板实例化'boost :: archive :: detail :: extra_detail :: guid_initializer'
不知道出了什么问题 . 我是新手,可以提升并弄清楚这是如何运作的 .
注意:如果我在struct中使用int而不是long,我没有看到boost :: STATIC_ASSERTION_FAILURE错误 .
1 回答
澄清上面的评论
是问题,一旦X被实例化,速率被设置为一个恒定值,并且boost不能改变它 . 相反,如果它读
你的代码有用吗?