8

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

2 回答 2

17

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

于 2013-04-21T18:58:33.973 回答
0

为什么要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;
于 2013-04-21T12:32:59.837 回答