【问题标题】:error C2039: 'serialize' : is not a member of 'std::vector<_Ty>'错误 C2039:“序列化”:不是“std::vector<_Ty>”的成员
【发布时间】:2013-07-26 19:30:45
【问题描述】:
//define
typedef std::vector<double> vertex_data;

//serialise
std::ostringstream oss;
boost::archive::text_oarchive oa(oss); 
vertex_data data = .......get_data();//returns vertex_data
oa & m_state & data;//send this data over network

//deserialise
std::istringstream iss(recvd_msg);
boost::archive::text_iarchive ia(iss); 
vertex_data data;
ia>>data; //error here  

为什么在反序列化过程中会出现此错误?

【问题讨论】:

  • 因为...serialize 不是 std::vector 的成员。
  • 但是 stl 容器已经可以通过 boost 序列化了,不是吗?
  • 尝试包含&lt;boost/serialization/list.hpp&gt;

标签: c++ serialization boost


【解决方案1】:

问题是你没有为 std::vector 定义特殊的序列化,所以它回退到默认的序列化,它试图在要序列化的类上调用一个名为 serialize 的成员。

要获取 std::vector 的特殊代码,您需要包含 &lt;boost/serialization/vector.hpp&gt;,如下所述:

http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/serialization.html#models

【讨论】:

  • 谢谢!我害怕不得不将我的向量分开传输
【解决方案2】:

要使用 boost 序列化器进行反序列化,您需要使用运算符&,就像您用于序列化一样。

std::istringstream iss(recvd_msg);
boost::archive::text_iarchive ia(iss); 
vertex_data data;
ia & data;

【讨论】:

  • >> 也适用于反序列化,但我尝试 & 并得到相同的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多