Boost序列化给出了未定义的类型'boost :: STATIC_ASSERTION_FAILURE'

时间:2013-08-21 16:06:03

标签: c++ boost boost-serialization

我正在学习使用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错误。

1 个答案:

答案 0 :(得分:1)

澄清上述评论

struct X {
    const Long rate;
}

是问题,一旦X被实例化,rate被设置为常量值,并且boost不能改变它。相反,如果它读取

struct X {
    Long rate;
}

您的代码是否有效?