簡體   English   中英

&#39;struct std :: pair <int, int> &#39;沒有名為&#39;serialize&#39;的成員

[英]'struct std::pair<int, int>' has no member named 'serialize'

我正在嘗試將序列化集成到我的代碼中。 但是,我得到一個'沒有成員命名'的錯誤。 我正在閱讀的書中說std :: pair不需要包含頭文件而且不存在。 如何解決這個錯誤? 我的代碼看起來像這樣:

#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;
}

添加#include <boost/serialization/utility.hpp>以啟用std::pair序列化。

為什么std::pair提供serialize函數? 標准從未這樣說過。 說它不需要頭文件也是不正確的:它確實需要<utility>。 但是,它可能已經包含在您使用的另一個頭文件中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM