2014-01-31 32 views
0

我正在使用boost :: serialization,下面是我的類,我試圖在主函數中序列化這個類對象。如何在C++中使用boost:serialization時解決「sizeof」錯誤?

#include <unistd.h> 
#include <errno.h> 
#include <arpa/inet.h> 
#include <map> 
#include <sstream> 
#include <boost/archive/text_oarchive.hpp> 
#include <boost/archive/text_iarchive.hpp> 
#include <boost/serialization/access.hpp> 
#include <boost/static_assert.hpp> 

using namespace boost; 
using namespace std; 

class gps_position 
{ 
     public: 
     int i ; 
     int j; 
     friend class boost::serialization::access; 
     template<class Archive> 
     void serialize(Archive &ar, const unsigned int version) 
     { 
       ar & i; 
       ar & j; 
     } 

     gps_position(){}; 
     gps_position(int a, int b):i(a), j(b){}; 
}; 

int main() 
{ 
     std::stringstream ss; 
     boost::archive::text_oarchive ar(ss); 
     gps_position obj(10, 20); 
     ar << obj; 
     return 0; 
} 

但我發現了以下編譯錯誤:

/usr/include/boost/archive/detail/oserializer.hpp: In function 'void boost::archive::save(Archive&, T&) [with Archive = boost::archive::text_oarchive, T = gps_position]': 
/usr/include/boost/archive/basic_text_oarchive.hpp:78: instantiated from 'void boost::archive::basic_text_oarchive<Archive>::save_override(T&, int) [with T = gps_position, Archive = boost::archive::text_oarchive]' 
/usr/include/boost/archive/detail/interface_oarchive.hpp:78: instantiated from 'Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = gps_position, Archive = boost::archive::text_oarchive]' 
client.cpp:70: instantiated from here 
/usr/include/boost/archive/detail/oserializer.hpp:567: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' 

以下是庫安裝在我的系統提升:

boost-debuginfo-1.33.1-15.1.el5 
boost-debuginfo-1.33.1-15.1.el5 
boost-devel-1.33.1-15.1.el5 
boost-1.33.1-15.1.el5 
boost-1.33.1-15.1.el5 
boost-doc-1.33.1-15.1.el5 
boost-devel-1.33.1-15.1.el5 

任何指針來解決這些編譯錯誤?

+0

在這裏猜測,但您可能只需要明確包含''標頭? – Keith

+0

無法[再現](http://coliru.stacked-crooked.com/a/1058cf440fe711b0)錯誤(您看到的錯誤都是鏈接器錯誤,代碼編譯)。你可以發佈一個[SSCCE](http://sscce.org)嗎? – Praetorian

+0

@Keith我還嘗試過包括上面的頭後仍然存在錯誤。 :( – BSalunke

回答

2

嘗試聲明

const gps_position obj(10, 20); 

如所建議的here;

boost版本1.33是瘋狂的老,我不認爲我們任何人都會輕易複製。

相關問題