> >',c++,cmake,yaml,yaml-cpp"/>

首页 > 解决方案 > yaml cpp 错误:'YAML::TypedBadConversion> >'

问题描述

我想从 yaml 文件中读取向量,但是当我尝试这样做时,出现以下错误

在抛出 'YAML::TypedBadConversion<std::vector<double, std::allocator >>' 的实例后调用终止 what(): bad conversion Aborted (core dumped)

我的主要程序是

bool fileLoaded = false;
YAML::Node config;

std::vector<double> target_jpos;

try
{
    config = YAML::LoadFile("/config/test.yaml");
    fileLoaded = true;
}
catch(std::exception& e)
{
    fileLoaded = false;
}

target_jpos = config["target_jpos"].as<std::vector<double> >();

if(fileLoaded)
    std::cout << "File loaded successfully \n\t target_jpos[0]: " << target_jpos[0] << "\n";
else
    std::cout << "File failed to load\n"; 

我的 test.yaml 文件是

target_jpos: [-0.6, -1.0, 2.7, 0.6, -1.0, 2.7, -0.6, -1.0, 2.7, 0.6, -1.0, 2.7]

一切看起来都很好,但不知道为什么我会收到这个错误。有人对解决这个问题有任何想法吗?

编辑:我的 CMakeLists.txt 是

cmake_minimum_required(VERSION 3.5)
add_subdirectory(yaml-cpp)

set(CMAKE_CXX_FLAGS "-std=c++11")

add_executable(yaml-parser main.cpp)
target_link_libraries(yaml-parser yaml-cpp)

我的树结构是

├── CMakeLists.txt
├── config
│   └── test.yaml
├── main.cpp
└── yaml-cpp

编辑:这是完整程序的链接。

标签: c++cmakeyamlyaml-cpp

解决方案


YAML::Node问题是您在检查文件是否已成功加载之前尝试从中提取数据。负载引发异常,因此达到您的检查。在使用数据之前,请务必检查是否成功。

另一方面,您可以通过将 YAML 文件更改为:

---
target_jpos: [-0.6, -1.0, 2.7, 0.6, -1.0, 2.7, -0.6, -1.0, 2.7, 0.6, -1.0, 2.7]

推荐阅读