C++ Boost序列化编译问题

C++ Boost序列化编译问题,c++,xml,serialization,boost,xml-serialization,C++,Xml,Serialization,Boost,Xml Serialization,我在windows上使用boost序列化,我想在linux(ubuntu)上测试我的代码,但不幸的是它无法编译 #include <string> #include <fstream> #include <boost/archive/xml_iarchive.hpp> #include <boost/archive/xml_oarchive.hpp> #include <boost/serialization/string.hpp>

我在windows上使用boost序列化,我想在linux(ubuntu)上测试我的代码,但不幸的是它无法编译

#include <string>
#include <fstream>

#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>


#include <boost/serialization/string.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/export.hpp>


class MyClass
{
  public:
    int something;
    MyClass();

    template<class archive> void serialize(archive& ar, const unsigned int version)
    {
      using boost::serialization::make_nvp;
      ar & make_nvp("something", something);
    }


};



MyClass::MyClass()
  : something(0)
{
}

int main(int argc, char ** argv)
{
  std::cout << "Hello";
  MyClass obj();

  std::string path = "here.xml";

  std::ifstream ifs(path.c_str());
  if (ifs.good())
  {
    boost::archive::xml_iarchive ia(ifs);
    ia >> boost::serialization::make_nvp("obj", obj);

    ifs.close();
    return true;
  }
  else
    return false;

}
下面是我得到的:

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()>)’
在/usr/include/boost/archive/detail/interface\u iarchive.hpp:23中包含的文件中,
来自/usr/include/boost/archive/detail/common_iarchive.hpp:21,
来自/usr/include/boost/archive/basic_xml_iarchive.hpp:23,
来自/usr/include/boost/archive/xml_iarchive.hpp:24,
来自测试。cpp:6:
/usr/include/boost/archive/detail/iserializer.hpp:在函数“void boost::archive::load(archive&,const T&)[with archive=boost::archive::xml_iarchive,T=MyClass()]”中:
/usr/include/boost/archive/detail/common\u-iarchive.hpp:61:从“void boost::archive::detail::common\u-iarchive::load\u override(T&,int)[使用T=MyClass(),archive=boost::archive::xml\u-iarchive]实例化
/usr/include/boost/archive/basic_xml_iarchive.hpp:81:从“void boost::archive::basic_xml_iarchive::load_override(const boost::serialization::nvp&,int)”实例化[with T=MyClass(),archive=boost::archive::xml_iarchive]'
/usr/include/boost/archive/xml\u-iarchive.hpp:75:从“void boost::archive::xml\u-iarchive\u impl::load\u override(T&,int)[使用T=const boost::serialization::nvp,archive=boost::archive::xml\u-iarchive]实例化
/usr/include/boost/archive/detail/interface_-iarchive.hpp:61:从'archive&boost::archive::detail::interface_-iarchive::operator>>(T&)[with T=const-boost::serialization::nvp,archive=boost::archive::xml_-iarchive]'
test.cpp:48:从此处实例化
/usr/include/boost/archive/detail/iseralizer.hpp:570:错误:调用“load_wrapper(boost::archive::xml_iarchive&,MyClass(&(),boost::serialization::is_wrapper)”时没有匹配的函数
我可能缺少一个包含…

您遇到的。在你的主要方法中,改变

MyClass obj();

另外,在我的Linux系统上,链接行是

g++ test.cpp -lboost_serialization
注意下划线而不是破折号,如示例中所示

MyClass obj;
g++ test.cpp -lboost_serialization
g++ test.cpp -lboost-serialization