C++ boost::serialization::shared\u ptr\u helper出错

C++ boost::serialization::shared\u ptr\u helper出错,c++,boost,C++,Boost,通过包含,我得到了错误: /usr/local/include/boost/serialization/shared_ptr_helper.hpp:182:20: error: no matching function for call to 'std::map<const void*, std::shared_ptr<void>, std::less<const void*>, std::allocator<std:: pair<const void*

通过包含,我得到了错误:

/usr/local/include/boost/serialization/shared_ptr_helper.hpp:182:20: error: no matching function for
call to 'std::map<const void*, std::shared_ptr<void>, std::less<const void*>, std::allocator<std::
pair<const void* const, std::shared_ptr<void> > > >::insert(std::pair<const void*, std::
shared_ptr<const bagel::Atom> >)'
             result = m_o_sp->insert(std::make_pair(oid, s));
/usr/local/include/boost/serialization/shared\u ptr\u helper.hpp:182:20:错误:没有与
调用'std::map::insert(std::pair)'
结果=m_o_sp->insert(std::make_pair(oid,s));

怎么了??std和boost的版本都是最新的。

你当然不会“通过包括”而得到它。我知道这一点,因为
bagel::Atom
不是boost的一部分

如果没有显式转换(
static\u pointer\u cast
),您就不能指望将
shared\u ptr>
存储到
std::shared\u ptr

使用

std::map<void*, std::shared_ptr<void> >
std::map

这是一种巨大的设计气息。无论如何,您绝对不能期望任何内容自动序列化(因为,
void
如何有效地序列化?

您肯定不会“通过包含”来实现这一点。我知道这一点,因为
bagel::Atom
不是boost的一部分

如果没有显式转换(
static\u pointer\u cast
),您就不能指望将
shared\u ptr>
存储到
std::shared\u ptr

使用

std::map<void*, std::shared_ptr<void> >
std::map

这是一种巨大的设计气息。无论如何,您绝对不能期望这些内容被自动序列化(因为,
void
如何有效地序列化?

您的中断可能是v1.56中Boost序列化库更改的结果。因此,我也经历过类似的问题。经过一天的搜索、测试、拔出头发等等,我发现(实际上是我的同事发现的)这个针对Boost的bug:

“序列化共享\u ptr的编译失败”()

坏消息是错误已经被关闭,行为被视为“改进”。我不同意,可能会尝试重新打开错误



更新5/24/15:Boost bug受到了更多的关注,据报道已在“4周前”修复。没有确定哪个版本包含此修复,但从1.58开始,它似乎还没有出现。

您的损坏可能是由于v1.56中的Boost序列化库发生了更改。因此,我也经历过类似的问题。经过一天的搜索、测试、拔出头发等等,我发现(实际上是我的同事发现的)这个针对Boost的bug:

“序列化共享\u ptr的编译失败”()

坏消息是错误已经被关闭,行为被视为“改进”。我不同意,可能会尝试重新打开错误



15年5月24日更新:Boost bug受到了更多关注,据报道已在“4周前”修复。关于哪个版本包含此修复,目前还没有定论,但截至1.58,它似乎还没有出现。

当然,我没有,这是我正在编译的项目的一部分。我明白了,非常感谢。我在从Boost 1.55更新到1.56时产生了一个类似的错误(尽管我仍然在使用2010编译器,所以错误是不同的)。这个令人不快的代码显然在Boost头中,所以。。。一个人怎样才能避开它呢?我不打算修复Boost代码本身@aldo“违规代码”是一个模板实例化。我看不到您的特定代码,但在OP的例子中,实例化点在他的代码中,模板实例化参数导致了问题。它们“显然”不在增压头中。跟我重复:“垃圾输入->垃圾输出”:。(特别是对于只有页眉的库来说,这是一个很好的咒语)@aldo:很有可能你也为1.55生成了垃圾,而且它正好起作用。“看来能产生有效的结果并不是对非垃圾的有效测试。”sehe向您表示诚挚的歉意。我今天一定很糟糕。我已经删除了评论,并将重新措辞…当然,我没有,这是我正在编译的项目的一部分。我明白了,非常感谢。我在从Boost 1.55更新到1.56时产生了一个类似的错误(尽管我仍然在使用2010编译器,所以错误是不同的)。这个令人不快的代码显然在Boost头中,所以。。。一个人怎样才能避开它呢?我不打算修复Boost代码本身@aldo“违规代码”是一个模板实例化。我看不到您的特定代码,但在OP的例子中,实例化点在他的代码中,模板实例化参数导致了问题。它们“显然”不在增压头中。跟我重复:“垃圾输入->垃圾输出”:。(特别是对于只有页眉的库来说,这是一个很好的咒语)@aldo:很有可能你也为1.55生成了垃圾,而且它正好起作用。“看来能产生有效的结果并不是对非垃圾的有效测试。”sehe向您表示诚挚的歉意。我今天一定很糟糕。我已经删除了评论,并将重新措辞…这看起来相关。我同意
shared\u ptr
中有很大的价值,可以完全忽略看起来相关的内容。我也同意,完全忽略它,在
shared\u ptr
中有很大的价值