You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用yaml-cpp 0.6.3在Linux下读取YAML文件出现TypedBadConversion错误求解

问题原因分析

你遇到的YAML::TypedBadConversion异常由以下几个问题共同导致:

  • 你提供的sample.yaml顶层结构是YAML序列(数组),不是键值对映射,不能直接用config["键名"]的方式访问顶层节点
  • 你的YAML文件中不存在代码里尝试访问的Circles字段,访问不存在的节点后做类型转换会直接抛出转换异常
  • YAML里的x/y/z均为浮点数类型,直接用as<std::int64_t>()转换会触发类型不匹配错误
  • 代码里YAML::LoadFile('yamlfile')写法不符合C++语法,字符串字面量需要用双引号包裹
正确读取示例代码
#include <yaml-cpp/yaml.h>
#include <iostream>

int main() {
    try {
        // 字符串用双引号,替换为你的yaml文件实际路径
        YAML::Node config = YAML::LoadFile("sample.yaml");
        
        // 先遍历顶层序列
        for (const auto& top_item : config) {
            // 读取Pos字段
            std::string pos = top_item["Pos"].as<std::string>();
            std::cout << "当前位置:" << pos << "\n矩形坐标点如下:" << std::endl;
            
            // 遍历Rectangle下的坐标点序列
            const auto& rect_points = top_item["Rectangle"];
            for (size_t idx = 0; idx < rect_points.size(); idx++) {
                const auto& point = rect_points[idx];
                // 浮点数用double类型接收
                double x = point["x"].as<double>();
                double y = point["y"].as<double>();
                double z = point["z"].as<double>();
                printf("点%zu:x=%.3f, y=%.3f, z=%.3f\n", idx+1, x, y, z);
            }
        }
    } catch (const YAML::Exception& e) {
        std::cerr << "解析失败:" << e.what() << std::endl;
        return 1;
    }
    return 0;
}
注意事项
  • 访问节点前可先判断节点是否存在:if (top_item["Pos"]),避免访问不存在的字段抛出异常
  • 可以给as方法指定默认值,进一步避免异常:point["x"].as<double>(0.0),字段不存在时会返回默认值0.0
  • 编译时需要链接yaml-cpp库,编译命令参考:g++ 你的代码文件名.cpp -o yaml_test -lyaml-cpp

内容的提问来源于stack exchange,提问作者Hosen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:36:04