linux中yaml-cpp 0.5.3的示例

时间:2017-07-27 09:26:33

标签: linux yaml-cpp

我对yaml-cpp很新。完成tutorials后,那些教程很好。但是当我尝试解析我自己的yaml文件时,对我来说这很困难。我对"运营商"感到困惑和"节点"。
yaml文件如下所示。

Device:  
  DeviceName: "/dev/ttyS2"  
  Baud: 19200  
  Parity: "N"  
  DataBits: 8  
  StopBits: 1  
Control:  
  Kp: 5000
  Ki: 8
  FVF: 100
  VFF: 1962

你能不能给我一个例子来从yaml文件中获取数据?谢谢你的帮助。 我也跟着这个question,我可以建立它。但是当我运行它时,我得到分段错误(核心转储) 代码

#include <yaml-cpp/yaml.h>
#include <string>
#include <iostream>

using namespace std;

 int main()
{
    YAML::Node config = YAML::LoadFile("init.yaml");
    //read device
    std::string DeviceName = config["Device"][0]["DeviceName"].as<std::string>();
    int         Baud       = config["Device"][1]["Baud"].as<int>();
    std::string Parity     = config["Device"][2]["Parity"].as<std::string>();
    int         DataBits   = config["Device"][3]["DataBits"].as<int>();
    int         StopBits   = config["Device"][4]["StopBits"].as<int>();

    //read control
    int Kp  = config["Control"][0]["Kp"].as<int>();
    int Ki  = config["Control"][1]["Ki"].as<int>();
    int FVF = config["Control"][2]["FVF"].as<int>();
    int VFF = config["Control"][3]["VFF"].as<int>();

    cout <<"DeviceName" << DeviceName << endl;
    cout <<"Baud"       << Baud       << endl;
    cout <<"Parity"     << Parity     << endl;
    cout <<"DataBits"   << DataBits   << endl;
    cout <<"StopBits"   << StopBits   << endl;

    cout <<"Kp"  << Kp  << endl;
    cout <<"Ki"  << Ki  << endl;
    cout <<"FVF" << FVF << endl;
    cout <<"VFF" << VFF << endl;
   return 0;
}

1 个答案:

答案 0 :(得分:0)

上面的代码导致转换异常,因为您以错误的方式访问地图项。

而不是

std::string DeviceName = config["Device"][0]["DeviceName"].as<std::string>();

写一下

std::string DeviceName = config["Device"]["DeviceName"].as<std::string>();
最好的问候 罗伯特