【发布时间】:2018-10-04 05:14:50
【问题描述】:
我正在使用最新的 yaml-cpp 0.6 来解析 yaml 文件。
我的 yaml 文件是这样的,
-person: p1
obj:
name: x
age: 27
-person: p2
obj:
name: y
age:38
我的代码,
#include <iostream>
#include <yaml-cpp/yaml.h>
using namespace std;
int main()
{
YAML::Node config = YAML::LoadFile("config.yaml");
if(config.IsNull())
{
cout << "return";
}
cout << "size: " << config.size() << endl;
for(YAML::iterator it = config.begin(); it != config.end(); ++it)
{
YAML::Node node = *it;
cout << "node size: " << node.size() << endl;
//for(YAML::iterator it2 = node.begin(); it2!=node.end(); ++it2) {}
//iterating over node throws seg fault
cout << node << endl;
cout << "-----" << endl;
}
return 0;
}
我看到的o/p是,
return
size: 2
node size: 2
node size: 2
obj:
name: x
age: 27
person: p1
2
-----
person: p2
obj:
age: 38
name: y
请帮助我理解为什么根节点配置在我的情况下为 Null,尽管它的大小返回 2。 此外,如果配置虽然 Null 是可迭代的,那么为什么不节点呢? 迭代节点会引发段错误,因此被评论。 如何遍历节点以在我的情况下列出人员并读取每个人的属性? 如何获取姓名、年龄.. 使用类似 node["person"]["name"] 的东西?
这是我的错误。不确定,如果是因为 libyaml-cpp 安装错误...它开始工作一次,删除并重新安装了 libyaml-cpp0.5/libyaml-cpp-dev。 谢谢!
【问题讨论】:
-
当我升级到 0.6 版时,我似乎遇到了顶级节点为空的相同问题。你有没有回到 0.6 并弄明白?