2013-04-21 2 views
6

自分のコードにシリアル化を統合しようとしています。しかし、私は、 'メンバーがありません'というエラーが表示されます。私が読んでいる本によれば、std :: pairにはヘッダファイルを含める必要はなく、存在しません。このエラーを修正するには? 私のコードは次のようになります。'struct std :: pair <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

std::pairシリアライズを有効にするには、#include <boost/serialization/utility.hpp>を追加します。

1

なぜstd::pairserialize機能を提供する必要がありますか?規格はそれを決して言わない。ヘッダーファイルが必要ないと言うのも間違いです:実際には<ユーティリティが必要です。しかし、おそらくあなたが使用している別のヘッダファイルにすでに含まれています。

独自のserialize機能を提供することができます。 Boostはすでに例を提供しています。あなたの場合、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

xmlアーカイブでは機能しません。 'make_nvp'を使うべきです。 –

関連する問題