2013-04-21 6 views
6

मैं अपने कोड में क्रमबद्धता को एकीकृत करने की कोशिश कर रहा हूं। हालांकि, मुझे 'कोई सदस्य नाम नहीं है' त्रुटि मिलती है। पुस्तक जो मैं पढ़ रहा हूं, कहती है कि std :: pair को हेडर फ़ाइल की आवश्यकता नहीं है और इसमें मौजूद नहीं है। इस त्रुटि को कैसे ठीक करें? इस तरह मेरे कोड नज़र:'स्ट्रक्चर std :: जोड़ी <int, int>' का कोई सदस्य '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' को' 'में परिभाषित किया गया है। –

उत्तर

14

#include <boost/serialization/utility.hpp> जोड़े std::pair क्रमबद्धता सक्षम करने के लिए।

1

क्यों std::pair एक serialize समारोह प्रदान करना चाहिए? मानक कभी नहीं कहता है। यह कहना भी गलत है कि इसे हेडर फ़ाइल की आवश्यकता नहीं है: इसे < उपयोगिता> वास्तव में आवश्यक है। हालांकि, यह संभवतः पहले से ही आपके द्वारा उपयोग की जाने वाली किसी अन्य शीर्षलेख फ़ाइल द्वारा शामिल किया गया है।

आप अपना खुद का serialize फ़ंक्शन प्रदान कर सकते हैं। बूस्ट पहले से ही उदाहरण प्रदान करता है। आपके मामले में, आपको main से पहले निम्नलिखित कोड जोड़ना होगा।

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 

वैसे, मैं अपने कोड में string s का उपयोग कर की जरूरत नहीं दिख रहा। आपको लगता है कि लाइन को हटा सकते हैं और बस का उपयोग करें:

std::stringstream ss; 
+5

जोड़ी क्रमबद्धता कोड ' 'में है, स्वयं को लिखने की कोई आवश्यकता नहीं है। –

+0

यह एक्सएमएल अभिलेखागार के साथ काम नहीं करेगा। आपको 'make_nvp' का उपयोग करना चाहिए। –

संबंधित मुद्दे