2012-09-05 3 views
1

부스트 예제 코드를 사용하여 개체 포인터 벡터를 파일에 저장하고 있습니다. 내 벡터는 다음과 같습니다파일에 사용자 지정 개체에 대한 포인터 벡터를 저장하십시오.

class VOMC{ 
public: 
    vector<State*> vomc; 
... 
... 
private: 
    friend class boost::serialization::access; 
    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & vomc; 
    } 
} 

이 (몇들 사이에서) 나에게 다음과 같은 오류를 제공합니다 :

/usr/local/include/boost/serialization/access.hpp:118:9: error: ‘class State’ has no member named ‘serialize’ 
오류가 나는 또한 (내 객체 직렬화해야하는 것이 아마 저를 말하고 있습니다

확실하지 않다). 또한 포인터 (메모리에 대한 주소)를 저장하면 실제 데이터가 저장되지 않으므로 프로그램 종료시에 해제 될 것이므로 혼란 스럽습니다. 위의 상황에 대한 해결책이 있습니까? 심지어 부스트없이.

+1

예,'State' 직렬화해야 읽어야한다 생각하고, 실제 목적은 ("깊은"직렬화) 연재됩니다. 설명서를 읽으십시오 : http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html –

답변

2

State 클래스의 경우 serialize 메서드가 필요합니다.

http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html

어레이의 각 구성원은 직렬화 될 멈춘다. 그러나 각 멤버가 포인터라는 것을 기억하십시오 - 이것이 실제로 의미 할 수있는 것은 무엇입니까? 이 직렬화의 전체 목적은 다른 장소와 시간에 원래의 데이터 구조를 재구성 할 수 있도록하는 것입니다. 포인터를 사용하여이를 수행하려면 포인터의 값을 저장하는 것으로 충분하지 않으며 포인터가 가리키는 대상을 저장해야합니다. 멤버가 나중에로드되면 새 객체를 만들고 새 포인터를 클래스 멤버에로드해야합니다.

또한 난 당신에 대한 serialization of pointers

관련 문제