2012-02-15 67 views
1

我是使用Boost序列化的新手。我使用的是XML序列化和非侵入式版本。我一步一步跟着教程(来自Boost网站),我的代码工作正常。Boost序列化和命名空间

当我在名称空间(ns_mytests)中将我的类(代码分为.h和.cpp加上main.cpp文件)时出现问题。在这种情况下,编译器(G ++)抱怨,我有以下错误:

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 

这是确保我做错了什么,但我便无法找到我的错误。

任何帮助表示赞赏。

谢谢, westfork

+1

它很清楚地说它试图调用一个带有'save('boost :: archive :: xml_oarchive&,ns_mytests :: Test const&,boost :: serialization :: version_type const&)''的签名函数 - 你有这样的一个函数?如果你这样做,什么名字空间是_it_在? (_Hint_,_hint_,显示你的代码,不只是你的错误。) – ildjarn 2012-02-15 00:38:35

+0

谢谢。是的,这是命名空间的问题。 – westfork 2012-05-12 17:33:14

回答

1

定义在被定义为被序列化的类型的名称空间非侵入save

+0

谢谢。现在它的作品 – westfork 2012-05-12 17:32:15

+0

不客气。请随时标记答案,如果它有任何帮助。 – 2012-05-13 10:01:52