gpt4 book ai didi

c++ - 被 YAML::NodeType::Undefined 与 yaml-cpp 混淆

转载 作者:太空狗 更新时间:2023-10-29 21:15:01 31 4
gpt4 key购买 nike

我有一个测试 yaml 文件,我正在尝试使用 yaml-cpp 进行解析。

测试.yaml

testConfig:
# this points to additional config files to be parsed
includes:
required: "thing1.yaml"
optional: "thing2.yaml"
#some extraneous config information
foo: 42
bar: 394
baz: 8675309

我解析它得到 testConfig.Type() 返回 YAML::NodeType::Map。这是预期的行为。

然后,我尝试解析包含以获取我无法迭代的必需值或可选值,因为 includes.Type() 返回 YAML::NodeType::Undefined。我对 yaml 和 yaml-cpp 真的很陌生,所以如果能帮助我指出我哪里出错了,我们将不胜感激。

解析代码:

{includes and other such nonsense} 
.
.
.
YAML::Node configRoot = YAML::LoadFile(path.c_str() );
if( configRoot.IsNull() )
{
SYSTEM_LOG_ERROR("Failed to load the config file: %s.",
path.c_str());
return false;
}

YAML::Node includes = configRoot["includes"];
/* ^^^^^^^^^^^^^^^
* I believe that here lies the issue as includes is undefined and
* therefore I cannot iterate over it.
*/
for( auto it = include.begin(); it != include.end(); ++it )
{
// do some fantastically brilliant CS voodoo!
}
.
.
.
{ more C++ craziness to follow }

解决方案:我删除了不必要的顶级 configTest,以便我可以根据需要解析包含的内容。

最佳答案

好吧,您的顶级 YAML 文档确实不包含名为 includes 的键。它只包含一个名为 testConfig 的键。您应该首先访问它:

// ...
YAML::Node configRoot = YAML::LoadFile(path.c_str())["testConfig"];
// ...

或者,如果您想显式检查 testConfig 是否存在:

// ...
YAML::Node configRoot = YAML::LoadFile(path.c_str());
// do check her as in your code
YAML:Node testConfig = configRoot["testConfig"];
// check if testConfig is a mapping here
YAML::Node includes = testConfig["includes"];
// ...

关于c++ - 被 YAML::NodeType::Undefined 与 yaml-cpp 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126258/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com