2013-04-21 7 views
6

Ich versuche Serialisierung in meinen Code zu integrieren. Allerdings bekomme ich den Fehler a 'Hat kein Mitglied namens'. Das Buch, das ich lese, besagt, dass std :: pair keine Header-Datei zum Einbinden braucht und es nicht existiert. Wie behebe ich diesen Fehler? Mein Code sieht wie folgt aus:'struct std :: pair <int, int>' hat kein Mitglied namens 'serialize'

#include <iostream> 
//ofstream/ifstream 
#include <fstream> 

#include <boost/archive/text_iarchive.hpp> 
#include <boost/archive/text_oarchive.hpp> 
//stringstream 
#include <sstream> 
// 
#include <boost/serialization/complex.hpp> 
#include <boost/serialization/bitset.hpp> 
//#include <boost/serialization/ 

//BOOST_BINARY 
#include <boost/utility/binary.hpp> 

using namespace std; 

int main() 
{ 
    complex<double> c(1,0); 
    bitset<3> b(BOOST_BINARY(101)); 
    pair<int,int> p(1,2); 
    string s; 
    std::stringstream ss(s); 
    boost::archive::text_oarchive oa(ss); 
    oa<<c<<b<<p;  
    { 
     complex<double> c; 
     bitset<3> b; 
     pair<int,int> p; 
     boost::archive::text_iarchive ia(ss); 
     ia>>c>>b>>p;  
    } 
    return 0; 
} 
+4

'std :: pair' ist definiert in' '. –

Antwort

14

#include <boost/serialization/utility.hpp> hinzufügen std::pair Serialisierung zu ermöglichen.

1

Warum sollte std::pair bieten eine serialize Funktion? Der Standard sagt das nie. Es ist auch falsch zu sagen, dass es keine Header-Datei benötigt: es erfordert < Dienstprogramm> wirklich. Es ist jedoch wahrscheinlich bereits in einer anderen Header-Datei enthalten, die Sie verwenden.

Sie können Ihre eigene serialize Funktion zur Verfügung stellen. Boost bietet bereits Beispiele. In Ihrem Fall müssen Sie den folgenden Code vor main hinzufügen.

namespace boost { 
namespace serialization { 

template <class Archive, typename T1, typename T2> 
void serialize(Archive& ar, std::pair<T1, T2>& pr, const unsigned int version) 
{ 
    ar & pr.first; 
    ar & pr.second; 
} 

} // namespace serialization 
} // namespace boost 

By the way, ich sehe nicht die Notwendigkeit von string s in Ihrem Code verwenden. Sie können diese Zeile entfernen und verwenden nur:

std::stringstream ss; 
+5

Der Paar-Serialisierungscode befindet sich in '', Sie müssen nicht selbst schreiben. –

+0

Es wird nicht mit XML-Archiven funktionieren. Sie sollten 'make_nvp' verwenden. –

Verwandte Themen