YAML :: LoadFile(std :: string const&)找不到文件[ROS中的Yaml-cpp]

时间:2019-02-12 09:47:55

标签: c++ yaml ros yaml-cpp

我正在尝试使用ROS(kinetic)/ c ++代码中的yaml文件中的数据,因此yaml-cpp似乎对我来说是一个不错的选择。我的代码未产生任何错误,但无法正常工作:

似乎YAML::LoadFile函数无法找到我的文件,因为以下几行变为异常:

YAML::Node yamlnode_;     
try{
    yamlnode_= YAML::LoadFile("../yaml_file.yaml");
}
catch(std::exception &e){
    ROS_ERROR("Failed to load yaml file");
}

通过包含yaml-cpp

#include <yaml-cpp/yaml.h>

自从YAML ::函数随后被识别以来,似乎可以正常工作。


路径../yaml_file.yaml设置正确,我也通过

在程序中检入
#include "../yaml_file.yaml"

产生解析错误(如预期的那样),表明我已找到正确的文件(但显然不能包括在内)。


yaml_file.yaml已成功用于多个.xacro文件。


请记住,我对ROS和yaml-cpp有点陌生;希望能看到您的问题和答案

1 个答案:

答案 0 :(得分:0)

使用#include "../yaml_file.yaml"包含YAML文件会引发错误,这仅表明该文件位于当前目录的父目录中,或者位于编译器使用的include路径中的目录之一中。

使用"../yaml_file.yaml"进行加载时,该文件需要在执行时位于当前目录的父目录中。通常,这是您从中启动程序的目录的父目录(不必是程序所在的目录)。但是,如果您的程序(使用chdir()更改了当前目录,并且您不知道它可能在“哪里”,那么您只想打印getcwd()的结果以了解情况。

您应该对#include <unistd.h>使用getcwd(),它需要一个指向字符缓冲区的指针,该指针足够大以容纳路径,并且该缓冲区可以容纳的(size_t)作为第二个参数。 (在某些实现中,您可以传递NULL,并分配足够大的缓冲区,在这种情况下,请使用返回值)

相关问题