2012-12-17 4 views
1

최근에는 객체 벡터가 포함 된 클래스를 직렬화하려고했습니다. #include <boost/serialization/vector.hpp>을 포함 시키면 간단한 & 연산자로 처리 할 수 ​​있습니다. 불행하게도, 컴파일러는 직렬화 코드를 작성하기로 동의하지만, 역 직렬화 테스트 케이스를 컴파일 할 수는 없습니다. 거기에 무슨 문제가 있을까요?부스트 :: serialize - 개체의 벡터를 deserialize 하시겠습니까?

> make testcase 
g++ -ggdb -fpermissive testcase.cpp -o testcase 
In file included from /usr/include/boost/archive/detail/oserializer.hpp:67:0, 
       from /usr/include/boost/archive/detail/interface_oarchive.hpp:23, 
       from /usr/include/boost/archive/detail/common_oarchive.hpp:22, 
       from /usr/include/boost/archive/basic_text_oarchive.hpp:32, 
       from /usr/include/boost/archive/text_oarchive.hpp:31, 
       from testcase.cpp:1: 
/usr/include/boost/archive/detail/check.hpp: In instantiation of ‘void boost::archive::detail::check_const_loading() [with T = const std::vector<A>]’: 
/usr/include/boost/archive/detail/iserializer.hpp:577:5: required from ‘void boost::archive::load(Archive&, T&) [with Archive = boost::archive::text_iarchive; T = const std::vector<A>]’ 
/usr/include/boost/archive/detail/common_iarchive.hpp:66:9: required from ‘void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/basic_text_iarchive.hpp:65:9: required from ‘void boost::archive::basic_text_iarchive<Archive>::load_override(T&, int) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/text_iarchive.hpp:82:9: required from ‘void boost::archive::text_iarchive_impl<Archive>::load_override(T&, int) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/detail/interface_iarchive.hpp:60:9: required from ‘Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = const std::vector<A>; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/detail/interface_iarchive.hpp:67:35: [ skipping 9 instantiation contexts ] 
/usr/include/boost/archive/detail/iserializer.hpp:592:5: required from ‘void boost::archive::load(Archive&, T&) [with Archive = boost::archive::text_iarchive; T = B]’ 
/usr/include/boost/archive/detail/common_iarchive.hpp:66:9: required from ‘void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = B; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/basic_text_iarchive.hpp:65:9: required from ‘void boost::archive::basic_text_iarchive<Archive>::load_override(T&, int) [with T = B; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/text_iarchive.hpp:82:9: required from ‘void boost::archive::text_iarchive_impl<Archive>::load_override(T&, int) [with T = B; Archive = boost::archive::text_iarchive]’ 
/usr/include/boost/archive/detail/interface_iarchive.hpp:60:9: required from ‘Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = B; Archive = boost::archive::text_iarchive]’ 
testcase.cpp:35:8: required from here 
/usr/include/boost/archive/detail/check.hpp:162:1: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 
+0

@ Ryan Guthrie 잘못되었습니다. Boost.Serialization은 에서이를 구현합니다. –

+0

STATIC_ASSERTION_FAILURE 행으로 이동하여 주석을 확인하십시오. –

+0

@Igor R - 죄송합니다. - 죄송합니다. - 의견이 삭제되었습니다. –

답변

3

serialize 멤버 함수 const 안 : 아래

#include <boost/archive/text_oarchive.hpp> 
#include <boost/archive/text_iarchive.hpp> 
#include <boost/serialization/vector.hpp> 

#include <fstream> 

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

class B 
{ 

     friend class boost::serialization::access; 

     template<class Archive> 
       void serialize(Archive & ar, const unsigned int version) const 
       { 
         ar & a; 
       } 

     std::vector<A> a; 
}; 

int main() 
{ 
     std::ifstream ifs("filename"); 
     boost::archive::text_iarchive ia(ifs); 
     B b; 
     ia >> b; 

} 

컴파일러의 오류입니다. 그것은 직렬화하는데 사용되지만, 역 직렬화에도 사용됩니다.

+1

I LOVE YOU !!!!!! – d33tah

관련 문제