2010-08-28 89 views
2

我在Windows上使用boost序列化,我想在linux(ubuntu)上測試我的代碼,不幸的是它不能編譯。Boost序列化編譯問題

#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; 

} 

這裏是我的編譯行:

g++ test.cpp -lboost-serialization 

這裏是我所得到的:

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()>)’ 

我可能缺少一個包括...

回答

4

您已經遇到Most Vexing Parse。在你的主要方法,改變

MyClass obj(); 

MyClass obj; 

另外,我的Linux系統上,該連接線是

g++ test.cpp -lboost_serialization 

注意下劃線,而不是短跑,就像在你的榜樣

g++ test.cpp -lboost-serialization