当前位置: 首页 > 知识库问答 >
问题:

gcc 4.7.2和boost 1.49中的boost::property _ tree::read _ JSON-编译时错误

潘宪
2023-03-14

我有以下代码:

#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>

#include <sstream>
#include <string>

int main()
{
  std::string input("{\"foo\":\"bar\"}");

  boost::property_tree::ptree pt;
  std::stringstream stream;
  stream << input;

  boost::property_tree::read_json(stream, pt);
}

在带有提升1.54的MSVC-11.0中,此代码编译良好,但在带有提升1.49的gcc 4.7.2中,此代码给我以下错误:

在包含 /usr/include/boost/property_tree/ /usr/include/boost/property_tree/detail: 0的文件中,从property_tr: 1:json_parser.hpp:14/json_parser:在'uluelboop_literal_valmain.cppproperty_trjson_parser_read.hppjson_parserontextproperty_tr::json_parser运算符()(boopproperty_tree::sic_ptree::csic_stringontext::It, boop::::aee::::::context::It)const[with Ptree=boop::ee::baee::,std::ba::c

, 提升::精神::经典::confix_parser, 提升::精神::经典:kleene_star, 提升::精神:经典::strlit, 提升::精神::经典:unary_parser_category, 提升::精神::经典:non_nested, 提升:精神::经典::is_lexeme

我做错了什么?我该如何修复它?

共有1个答案

壤驷睿
2023-03-14

正如在OP问题的评论中提到的,当使用boost::property_tree::read_json时,boost 1.49不会使用c 11编译。这是一个已知的错误,可以通过使用最新版本的boost或应用以下补丁来解决:

--- json_parser_read.hpp        2013-09-01 03:55:57.000000000 +0400
+++ /usr/include/boost/property_tree/detail/json_parser_read.hpp        2013-09-01 03:56:21.000000000 +0400
@@ -102,7 +102,7 @@
             void operator()(It b, It e) const
             {
                 BOOST_ASSERT(c.stack.size() >= 1);
-                c.stack.back()->push_back(std::make_pair(c.name, Str(b, e)));
+                c.stack.back()->push_back(std::make_pair(c.name, Ptree(Str(b, e))));
                 c.name.clear();
                 c.string.clear();
             }

sed -i -e 's/std::make_pair(c.name, Str(b, e))/std::make_pair(c.name, Ptree(Str(b, e)))/' json_parser_read.hpp

如本文所述。

 类似资料:
  • 我正在尝试读取压缩的json并遇到类型转换问题,这是代码 编译器说: src/ABPacking。cpp:48:错误:调用“read_json”时没有匹配函数(boost::iostreams::filtering_streambuf,std::分配器,boost::iostreams::public_ 问题是如何将filtering_streambuf传递给read_json而不进行不必要的数据

  • 这是我第一次体验提升::property_tree我找不到一种方法来重现从留档(如何访问属性树中的数据)之后的树中获取值的方法。这是我为尝试属性树而编写的简单代码: 这是输出: 如<code>树所示。get_value(“whather”)在树中不返回值。get_value(“null”)不引发异常,并且<code>get_optional 我的环境是:

  • 我正在我的程序中使用提升property_tree。我已将树设置为使用自定义路径类型。我正在寻找的是获取特定节点的父节点ID。 下面是一个例子: 结果如预期: 我需要的是一种不永久存储节点的完整id的方法。我想的是一种简单地获取它的父节点id并将其推到路径的前面等等到顶层的方法。但是我似乎在property_tree中找不到这样做的方法。这可能吗?如果没有,对于这种情况还有其他计算完整路径的方法吗

  • 我正在读取xml文件并将其存储到boost::property_tree::ptree pt(object)中。 我试图序列化这个ptree对象使用方法定义在ptree_serialization.hpp 当我使用上述代码时,我得到的错误是:; 如果我做错了什么,你能告诉我吗。请告诉我是否可以序列化xml解析的属性ptree对象。

  • 我在尝试编译使用boost库的项目时遇到问题。 我得到的错误是: 还有更多关于未来的编译错误。水电站。。。。。 我试图重新安装Windows SDK和Visual Studio,但这两种情况都没有帮助。 我想它可能是关于错误的包含路径,所以我检查项目属性中的宏。我发现在'包含目录'中我有$(VC_IncludePath);$(WindowsSDK_IncludePath); 评估为: C:\Pro

  • 我在Ubuntu 18.04上,g -8编译器找不到libboost-asio模块。然而,我用 每当我试图用下面的头文件进行编译时 我被抛出一个编译器错误,说头文件无法找到。 我能够使用其他boost头进行编译,例如boost/array。hpp,但与asio无关。 在libbooost上运行版本检查 returns:版本:1.65.1.0ubuntu1 我也找不到任何asio使用倾向的痕迹。我怀