C++使用yaml-cpp删除YAML文件指定节点失败问题求助
问题诱因
- 核心错误是
remove方法的传参不符合yaml-cpp的接口要求:yaml-cpp中Map类型节点的remove方法,入参需要是待删除的键的字面量值,而非键对应的节点对象。你代码中传入的是config["point"][name],也就是键A对应的子配置节点,Map无法匹配到对应的键,自然不会执行删除操作。 - 额外写的
config.remove(config["point"][name])属于无效操作:你要删除的是point子节点下的条目,根节点config中不存在对应键,这行代码不会产生任何效果。
修复方案
直接将两行删除逻辑替换为下面的代码即可:
// 直接传入待删除的键名,而非键对应的节点 config["point"].remove(name);
如果要增加健壮性,可以提前做类型和存在性校验:
YAML::Node point_node = config["point"]; if (point_node.IsMap() && point_node[name]) { point_node.remove(name); }
内容的提问来源于stack exchange,提问作者nhathai2899
相关产品推荐
相关产品推荐

