【问题标题】:'struct std::pair<int, int>' has no member named 'serialize''struct std::pair<int, int>' 没有名为 'serialize' 的成员
【发布时间】:2013-04-14 09:23:42
【问题描述】:

我正在尝试将序列化集成到我的代码中。但是,我得到一个“没有命名成员”错误。我正在阅读的书说 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;
}

【问题讨论】:

  • std::pair&lt;utility&gt; 中定义。

标签: c++ serialization boost


【解决方案1】:

添加#include &lt;boost/serialization/utility.hpp&gt; 以启用std::pair 序列化。

【讨论】:

    【解决方案2】:

    为什么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;
    

    【讨论】:

    • pair序列化码在&lt;boost/serialization/utility.hpp&gt;,不用自己写。
    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2021-12-31
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多