我正在學習使用boost來對我的一些C++類進行系列化。Boost序列化給出了未定義的類型'boost :: STATIC_ASSERTION_FAILURE'
我在接口中有一個結構。我使用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):error C2027:使用未定義的類型'boost :: STATIC_ASSERTION_FAILURE' [ X =假 ]
C:\用戶\ boost1470_win64_vc90sp1 \包括\升壓/存檔/細節/ iserializer.hpp(577):見參考起作用模板實例「無效的boost ::存檔::細節:: check_const_loading(無效) '被編譯 與 [ T =常量龍
C:\用戶\接口/ Interface.h(12):見參考起作用模板實例' 歸檔&升壓::歸檔:: detail :: interface_iarchive :: operator &(T &)'正在編譯 與 [ 存檔=升壓::歸檔:: text_iarchive, T =常量龍 ]
C:\用戶\接口/ Interface.h(17):見參考文獻類模板實例「升壓::歸檔::詳細:: extra_detail :: guid_initializer」正在編譯 與 [ T = X ]
任何想法什麼錯誤。我是新的提升和搞清楚這是如何工作的。
注:如果我在結構中使用int而不是long,我看不到boost :: STATIC_ASSERTION_FAILURE錯誤。
'rate'是const。反序列化如何將其設置爲正確的值? –
請不要用「throw」來描述C++編譯器錯誤,在C++中「throw」是指異常,而不是編譯器錯誤。 –
這是通過嘗試序列化到需要命名值對的存檔產生的典型錯誤。試試這個代碼'ar&make_nvp(「rate」,this-> rate);'。文檔:http://www.boost.org/doc/libs/1_59_0/libs/serialization/doc/wrappers.html#nvp,但是儘管Alan的評論很可能是錯誤('const_cast' * might * 幫幫我)。 – alfC