crazymumu
crazymumu

Reputation: 111

example for yaml-cpp 0.5.3 in linux

I am pretty new to yaml-cpp. After did tutorials, that tutorials are fine. But When I try to Parse my own yaml file, it's a litte difficult for me. I am confused with "operator" and "node".
yaml file is shown below.

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

Could you anyone give me an example to get data from that yaml file? thanks for your help. Also i followed this question , I can build it. But When I run it, I got Segmentation fault (core dumped) Code:

#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;
}

Upvotes: 0

Views: 835

Answers (1)

robert-wm
robert-wm

Reputation: 11

your code above results in a bad conversion exception because you access the map items in a wrong way.

instead of

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

just write

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

best regards robert

Upvotes: 1

Related Questions