2013-04-21 343 views
6

我正在嘗試將序列化集成到我的代碼中。但是,我得到一個'沒有成員名爲'錯誤。我正在閱讀的書說,std :: pair不需要包含頭文件並且不存在。如何解決這個錯誤? 我的代碼如下所示:'struct std :: pair <int, int>'has no member named'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'在''中定義。 – 2013-04-21 12:02:01

回答

14

添加#include <boost/serialization/utility.hpp>使std::pair系列化。

1

爲什麼要std::pair提供serialize功能?標準從來沒有說過。說它不需要頭文件也是不正確的:它實際上需要<實用程序。但是,它可能已經包含在您使用的另一個頭文件中。

您可以提供自己的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

對序列化代碼位於''中,不需要編寫自己的代碼。 – 2013-04-21 14:38:08

+0

它不適用於xml檔案。你應該使用'make_nvp'。 – 2013-04-21 18:59:43

相關問題