2012-02-15 4 views
1

Я новичок, используя сериализацию Boost. Я использую сериализацию xml и неинтрузивную версию. Я последовал за учебником (с сайта Boost) шаг за шагом, и мой код работает нормально.Расширение сериализации и пространство имен

Проблема возникает, когда я помещаю свой класс (код разделен на .h и .cpp плюс файл main.cpp) в пространстве имен (ns_mytests). В этом случае компилятор (г ++) жалуется и у меня есть следующие ошибки:

g++ -c -g test.o.d -o build/Debug/GNU-Linux-x86/sources/test.o sources/test.cpp 
/opt/local/include/boost/serialization/split_free.hpp: In static member function 'static void boost::serialization::free_saver<Archive, T>::invoke(Archive&, const T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]': 
/opt/local/include/boost/serialization/split_free.hpp:74: instantiated from 'void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]' 
sources/test.h:117: instantiated from 'void boost::serialization::serialize(Archive&, ns_mytests::Test&, unsigned int) [with Archive = boost::archive::xml_oarchive]' 
/opt/local/include/boost/serialization/serialization.hpp:128: instantiated from 'void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]' 
/opt/local/include/boost/archive/detail/oserializer.hpp:148: instantiated from 'void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]' 
sources/test.cpp:146: instantiated from here 
/opt/local/include/boost/serialization/split_free.hpp:45: error: no matching function for call to 'save(boost::archive::xml_oarchive&, const ns_mytests::Test&, const boost::serialization::version_type&)' 
make[2]: *** [build/Debug/GNU-Linux-x86/sources/test.o] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

Он уверен, что я делаю неправильно что-то, но я could't найти свою ошибку.

Любая помощь приветствуется.

Благодаря, westfork

+1

В нем четко сказано, что он пытается вызвать функцию с помощью подписи 'save (boost :: archive :: xml_oarchive &, ns_mytests :: Test const &, boost :: serialization :: version_type const &)' - у вас есть такие функция? Если да, то какое пространство имен находится в _it_? (_Hint_, _hint_, покажите свой код, а не только ваши ошибки.) – ildjarn

+0

Спасибо. Да, это была проблема с пространствами имен. – westfork

ответ

1

Определить в пространстве имен, где тип для сериализации определен неинтрузивного save.

+0

Спасибо. Теперь он работает – westfork

+0

Добро пожаловать. Пожалуйста, не стесняйтесь правильно отметить ответ, если это поможет. –

Смежные вопросы