提升序列化提供未定义的类型'boost::STATIC_ASSERTION_FAILURE'



我正在学习使用boost在C++中序列化我的一些类。

我在接口中有一个结构。我使用boost serilaize函数来序列化这个结构,如下所示。

接口.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);   

主要.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=常量长

C: \Users\interfaces/Interface.h(12):请参阅功能模板实例化的参考文件"归档和;boost::archive::detail::interface_iarchive::operator&(T&)'正在编译具有[Archive=boost::Archive::text_iarchive,T=常量长]

C: \Users\interfaces/Interface.h(17):请参阅对正在编译的类模板实例化"boost::archive::detail::extra_detail::guid_initifier"的引用具有[T=X]

知道出了什么问题吗。我是一个新来推动和弄清楚这是如何工作的人。

注意:如果我在结构中使用int而不是long,我不会看到boost::STATIC_ASSERTION_FAILURE错误。

澄清上面的注释

struct X {
    const Long rate;
}

问题是,一旦X被实例化,速率就被设置为一个恒定值,boost无法改变它。如果它读取

struct X {
    Long rate;
}

你的代码工作吗?

最新更新