【问题标题】:boost::property_tree::ptree serializing and deserializingboost::property_tree::ptree 序列化和反序列化
【发布时间】:2015-03-19 21:35:42
【问题描述】:

我正在读取 xml 文件并将其存储到 boost::property_tree::ptree pt(object) 中。

我正在尝试使用 ptree_serialization.hpp 中定义的方法 serialize() 序列化这个 ptree 对象

boost::property_tree::serialize(ar,pt,1);

当我使用上面的代码时,我得到的错误是;

boost/serialization/collections_save_imp.hpp:64:9: error: no match for ‘operator<<’ in ‘ar << boost::serialization::make_nvp(const char*, T&) [with T = const std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >]((* &((boost::iterator_facade<boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >::const_iterator, std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >, boost::bidirectional_traversal_tag, const std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >&, int>*)(& boost::operator++ [with I = boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >::const_iterator, V = std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >, TC = boost::bidirectional_traversal_tag, R = const std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >&, D = int, typename boost::detail::postfix_increment_result<I, V, R, TC>::type = boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >::const_iterator]((*(boost::iterator_facade<boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >::const_iterator, std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >, boost::bidirectional_traversal_tag, const std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >&, int>*)(& it)), 0)))->boost::iterator_facade<I, V, TC, R, D>::operator* [with Derived = boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >::const_iterator, Value = std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >, CategoryOrTraversal = boost::bidirectional_traversal_tag, Reference = const std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >&, Difference = int, boost::iterator_facade<I, V, TC, R, D>::reference = const std::pair<const std::basic_string<char>, boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> > >&]()))’

如果我做错了什么,请告诉我。请告诉我我们是否可以序列化 xml 解析的属性 ptree 对象。

【问题讨论】:

  • 你能告诉我们你是如何定义arpt的吗?
  • ar 可以是 iarchive 或 oarchive 对象。 pt 被声明为 boost::property_tree::ptree pt;
  • 我不是这方面的专家。 boost::property_tree::ptree pt(object) 似乎缺少模板:&lt;class Key, class Data, class KeyCompare&gt;。我认为serialize 根据其源代码需要basic_ptree 类型作为第二个参数:boost.org/doc/libs/1_42_0/boost/property_tree/…,另见:codereview.stackexchange.com/questions/1818。看看他们是否有帮助

标签: c++ boost


【解决方案1】:

您应该按预期使用存档界面:doc

ar << pt;

ar >> pt;

版本是使用BOOST_CLASS_VERSION(Type, version) 配置的,但这是在属性树的实现中

还记得

#include <boost/property_tree/ptree_serialization.hpp>

【讨论】:

  • 我在使用 ar , std::basic_string >*'
  • 它说你正在序列化一个指针。 (这可能是正常的)。我认为您缺少包含(请参阅答案文本)。你可以试试ar &lt;&lt; *pt虽然
  • 我包含了#include ,但我仍然遇到错误错误:'struct boost::property_tree::basic_ptree<:basic_string>,std: :basic_string >' 没有名为 'serialize' 的成员
猜你喜欢
  • 2014-06-11
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2012-03-17
相关资源
最近更新 更多