Я учусь использовать boost для сериализации некоторых из моих классов на C++.Boost serialization дает неопределенный тип boost: STATIC_ASSERTION_FAILURE
У меня есть структура в интерфейсе. Я использую функцию serillize boost, чтобы сериализовать эту структуру следующим образом.
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 \ включить \ усиление/архив/Detail/check.hpp (162): ошибка C2027: использование неопределенного типа 'подталкивание :: STATIC_ASSERTION_FAILURE' с [ х = ложь ]
C: \ Users \ boost1470_win64_vc90sp1 \ включить \ усиление/архив/Detail/iserializer.hpp (577): см ссылку на шаблон функции экземпляра Пустота подталкивание :: архив :: подробнее :: check_const_loading (аннулируются) 'компилируется с [ T = Const Long
C: \ Users \ интерфейсы/Interface.h (12): см ссылку на шаблон функции экземпляра' Архив & подталкивание :: Архив :: detail :: interface_iarchive :: оператор & (T &) 'составлен с [ архив = импульс :: архив :: text_iarchive, T = Const Long ]
C: \ Users \ интерфейсы/Interface.h (17): см ссылку на шаблон класса экземпляра «подталкивание :: архив :: подробнее :: extra_detail :: guid_initializer»компилируется с [ T = X ]
Любая идея, что происходит не так. Я новичок в развитии и выяснении того, как это работает.
Примечание: Если я использую int в struct вместо long, я не вижу ошибку boost :: STATIC_ASSERTION_FAILURE.
'rate' is 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, но на секунду, хотя комментарий Алана, скорее всего, будет ошибкой ('const_cast' * может * Помогите). – alfC