[英]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.