yaml-cpp : How to read this yaml file content using c++ /Linux (使用 yaml-cpp version = 0.6.3 )

yaml-cpp : How to read this yaml file content using c++ /Linux (using yaml-cpp version = 0.6.3 )

我正在尝试读取每个节点及其各自的内容(yaml 内容在下方) 我最终遇到了 belwo 错误。

错误: 在抛出 'YAML::TypedBadConversion

实例后调用终止

示例代码:

#include <yaml-cpp/yaml.h>
YAML::Node config = YAML::LoadFile('yamlfile');
std::cout << config["Circles"]["x"].as<std::int64_t>();

我也尝试过一些其他方法,但也许这个 yaml 格式很复杂。我可以阅读 yaml 的示例格式,但不能阅读我在下面提到的格式。

有人帮忙吗?

sample.yaml

- Pos: sensor - pos1
  Rectangle:
    - x: -0.2
      y: -0.13
      z: 3.26
    - x: 0.005
      y: -0.13
      z: 3.2
    - x: -0.2
      y: 0.10
      z: 3.26
    - x: 0.00
      y: 0.10
      z: 3.2

问题中的代码与您提供的 sample.yaml 文件不匹配,但这里有一个示例,说明如何提取 Rectangle in sample.yaml 中的浮点数].

#include "yaml-cpp/yaml.h"

#include <iostream>

int main() {
    try {
        YAML::Node config = YAML::LoadFile("sample.yaml");

        // The outer element is an array
        for(auto dict : config) {
            // The array element is a map containing the Pos and Rectangle keys:
            auto name = dict["Pos"];
            std::cout << "Name: " << name << '\n';

            auto rect = dict["Rectangle"];

            // loop over the positions Rectangle and print them:
            for(auto pos : rect) {
                std::cout << pos["x"].as<double>() << ",\t"
                          << pos["y"].as<double>() << ",\t"
                          << pos["z"].as<double>() << '\n';
            }
        }

    } catch(const YAML::BadFile& e) {
        std::cerr << e.msg << std::endl;
        return 1;
    } catch(const YAML::ParserException& e) {
        std::cerr << e.msg << std::endl;
        return 1;
    }
}

输出:

Name: sensor - pos1
0.2,    -0.13,  3.26
0.005,  -0.13,  3.2
-0.2,   0.1,    3.26
0,      0.1,    3.2