首页 文章

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

提问于
浏览
4

我正在学习使用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 回答

  • 1

    澄清上面的评论

    struct X {
        const Long rate;
    }
    

    是问题,一旦X被实例化,速率被设置为一个恒定值,并且boost不能改变它 . 相反,如果它读

    struct X {
        Long rate;
    }
    

    你的代码有用吗?

相关问题