繁体   English   中英

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

[英]YAML::LoadFile(std::string const&) does not find file [yaml-cpp in ROS]

我正在尝试使用ROS(动态)/ 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的新手。 期待看到您的问题和答案

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM