C++ C++;共享ptr序列化

C++ C++;共享ptr序列化,c++,serialization,boost,shared-ptr,C++,Serialization,Boost,Shared Ptr,我有一个名为a的类,我想在另一个名为B的类中序列化它的对象。但我一直在犯这样的错误: error: ‘class std::shared_ptr<A>’ has no member named ‘serialize’ 错误:“class std::shared\u ptr”没有名为“serialize”的成员 A类为: class A { public: typedef shared_ptr<A> Ptr; string name; Predicate(

我有一个名为a的类,我想在另一个名为B的类中序列化它的对象。但我一直在犯这样的错误:

error: ‘class std::shared_ptr<A>’ has no member named ‘serialize’
错误:“class std::shared\u ptr”没有名为“serialize”的成员
A类为:

class A
{
public:
  typedef shared_ptr<A> Ptr;
  string name;

  Predicate(const string &name = ""):name(name)
  {}

private:
  template<typename Archive>
  void serialize(Archive& archive, const unsigned int v) 
  {
    archive & name;
  }
  friend class B;
  friend class boost::serialization::access;
}
A类
{
公众:
类型定义共享\u ptr ptr;
字符串名;
谓词(const string&name=”“):名称(name)
{}
私人:
模板
无效序列化(存档和存档,常量未签名int v)
{
档案&名称;
}
B级朋友;
好友类boost::serialization::access;
}
和类B

class B
{
public:
  typedef unordered_set<A::Ptr, 
                        APtrKeyHash, 
                        APtrKeyEq> A_set_t;
  A_set_t test;

private:
  template<typename Archive>
  void serialize(Archive& archive, const unsigned int v) 
  {
    archive & test;
  }
  friend class boost::serialization::access;
}
B类
{
公众:
typedef无序集A\u集t;
A_集t检验;
私人:
模板
无效序列化(存档和存档,常量未签名int v)
{
存档与测试;
}
好友类boost::serialization::access;
}

注意,这里的shared_ptr是指std::shared_ptr,而不是boost::shared_ptr。事实上,我使用了这一行:使用名称空间std在我上A课之前

你可能忘了包括

#include <boost/serialization/shared_ptr.hpp>
#包括

您需要shared_ptr.hpp和boost 1.56版的组合

看起来boost序列化类不支持序列化std::shared_ptr。@SamVarshavchik我不知道人们是如何得出这种结论的(而且它也得到了很多支持)。人们询问的原因是为了从有经验的用户那里获得知情的答案。相关:@ChristianHackl我已经尝试过这个解决方案,因为sehe在这里回答了,但它不起作用@ChristianHackl版本问题是我的问题。谢谢。我已经尝试将这一行添加到我的代码中,但没有成功!问题是boost版本没有更新。感谢您的帮助