【问题标题】:yaml-cpp always creates a scalar node with size 0yaml-cpp 总是创建一个大小为 0 的标量节点
【发布时间】:2020-08-11 13:40:55
【问题描述】:

我想使用 yaml-cpp 来存储一些配置值。为了与 yaml-cpp 取得联系,我编写了一个创建节点的方法(_config 来自 Type YAML::Node),将一些值放入其中并将其写入文件:

  void write_config()
  {
        std::ofstream fout("/home/user/config.yaml");
        _config["Foo"]["0"] = "0";
        _config["Foo"]["1"] = "1";
        _config["Foo"]["2"] = "2";
        _config["Foo"]["3"] = "3";
        _config["Foo"]["4"] = "4";
        _config["Foo"]["5"] = "5";
        fout << _config;
  }

运行此方法后,会创建一个有效的 yaml 文件:

Foo:
  1: 1
  3: 3
  0: 0
  5: 5
  4: 4
  2: 2

之后,我创建了一个读取文件并打印一些信息的方法:

  void load_config()
  {     
        _config = YAML::Node("/home/user/config.yaml");
        cout << "_config: " << _config << endl;
        cout << "doc.Type(): " << _config.Type() << "\n";
        cout << "doc.size(): " << _config.size() << "\n";
        
        for (const auto& kv : _config)
        {
              std::cout << kv.first.as<std::string>() << "\n"; // prints Foo
              std::cout << kv.second.as<std::string>() << "\n"; // prints Foo
        }
  }

但输出是:

_config: /home/user/config.yaml
doc.Type(): 2
doc.size(): 0

有人能告诉我为什么节点是空的(大小 == 0)以及如何正确读取文件吗?

提前谢谢你!

【问题讨论】:

    标签: yaml-cpp


    【解决方案1】:

    我发现了我的错误......

    _config = YAML::Node("/home/user/config.yaml");
    

    应该是

    _config = YAML::LoadFile("/home/user/config.yaml");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      相关资源
      最近更新 更多