2012-02-24 12 views
6

ho cercato serializzazione ma ogni volta che è rimasto bloccato con errori come: -serializzazione utilizzando Boost.Serialization

error: 'class std::vector<int, std::allocator<int> >' has no member named 'serialize' 

ecco il mio codice sorgente e metodo di serializzare, sapendo io sono usare boost.serialize

template <class E, class T> 
class heap{ 

    vector<E> * hp; 
    int index;//index is pointing to first empty place after the last element 
    int maxsize; 

    T comp;//comparable object designed to compare the objects 

private: 
    friend class boost::serialization::access; 
    // When the class Archive corresponds to an output archive, the 
    // & operator is defined similar to <<. Likewise, when the class Archive 
    // is a type of input archive the & operator is defined similar to >>. 
    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 

     ar & hp; 
     ar & index; 
     ar & maxsize; 
     ar & comp; 
    } 

public: 
    //default empty constructor 
    heap(){ 

     hp = new vector<E>(MAX); 
     index = 0; 
     maxsize = MAX; 


    } 
. 
. 
. 
. 
. 
. 
} 

quindi ho cambiato questa linea ar & hp; in

for(int i = 0; i < hp->size(); i++) 
    ar & hp->at(i); 

ho ottenuto gli errori ancora peggiori come

/../../../../boost/boost_1_48_0/boost/archive/text_oarchive.hpp:100: undefined reference to `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::ostream&, unsigned int)' 
debug/main.o: In function `~text_oarchive_impl': 

Qt_4_8_0__4_8_0__Debug/../../../../boost/boost_1_48_0/boost/archive/text_oarchive.hpp:85: undefined reference to `boost::archive::basic_text_oprimitive<std::ostream>::~basic_text_oprimitive()' 

Qt_4_8_0__4_8_0__Debug/../../../../boost/boost_1_48_0/boost/archive/text_oarchive.hpp:85: undefined reference to `boost::archive::basic_text_oprimitive<std::ostream>::~basic_text_oprimitive()' 

risposta

18
  1. Includi <boost/serialization/vector.hpp>.
  2. Non allocare vector in modo dinamico.
  3. Non dimenticate di il collegamento alla serializzazione, non è una libreria di sola intestazione.
+1

Il numero 2 deve essere in caratteri grossi. –