Увеличена проблема компиляции сериализации - PullRequest
2 голосов
/ 28 августа 2010

Я использую сериализацию Boost для Windows, и я хотел протестировать мой код на Linux (Ubuntu), и, к сожалению, он не компилируется.*

И вот что я получаю:

In file included from /usr/include/boost/archive/detail/interface_iarchive.hpp:23,
                 from /usr/include/boost/archive/detail/common_iarchive.hpp:21,
                 from /usr/include/boost/archive/basic_xml_iarchive.hpp:23,
                 from /usr/include/boost/archive/xml_iarchive.hpp:24,
                 from test.cpp:6:
/usr/include/boost/archive/detail/iserializer.hpp: In function ‘void boost::archive::load(Archive&, const T&) [with Archive = boost::archive::xml_iarchive, T = MyClass()]’:
/usr/include/boost/archive/detail/common_iarchive.hpp:61:   instantiated from ‘void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = MyClass(), Archive = boost::archive::xml_iarchive]’
/usr/include/boost/archive/basic_xml_iarchive.hpp:81:   instantiated from ‘void boost::archive::basic_xml_iarchive<Archive>::load_override(const boost::serialization::nvp<T>&, int) [with T = MyClass(), Archive = boost::archive::xml_iarchive]’
/usr/include/boost/archive/xml_iarchive.hpp:75:   instantiated from ‘void boost::archive::xml_iarchive_impl<Archive>::load_override(T&, int) [with T = const boost::serialization::nvp<MyClass()>, Archive = boost::archive::xml_iarchive]’
/usr/include/boost/archive/detail/interface_iarchive.hpp:61:   instantiated from ‘Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = const boost::serialization::nvp<MyClass()>, Archive = boost::archive::xml_iarchive]’
test.cpp:48:   instantiated from here
/usr/include/boost/archive/detail/iserializer.hpp:570: error: no matching function for call to ‘load_wrapper(boost::archive::xml_iarchive&, MyClass (&)(), boost::serialization::is_wrapper<MyClass()>)’

Возможно, мне не хватает включения ...

1 Ответ

4 голосов
/ 28 августа 2010

Вы столкнулись с Most Vexing Parse .В вашем основном методе измените

MyClass obj();

на

MyClass obj;

, также, в моей системе Linux строка ссылки будет

g++ test.cpp -lboost_serialization

Обратите внимание на подчеркивание вместотире, как в вашем примере

g++ test.cpp -lboost-serialization
...