我正在尝试将序列化集成到我的代码中。但是,我得到一个'没有成员命名'的错误。我正在阅读的书中说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;
}
答案 0 :(得分:17)
添加#include <boost/serialization/utility.hpp>
以启用std::pair
序列化。
答案 1 :(得分:0)
std::pair
为什么要提供serialize
功能?标准从未这样说过。说它不需要头文件也是不正确的:它需要&lt; utility&gt;真。但是,它可能已经包含在您使用的另一个头文件中。
您可以提供自己的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;