传递给类初始化时 std::string 的值发生变化

问题描述

这个错误不容易复制,因为我在 Windows 上使用 ROS 2 并且安装不是那么简单,但我认为这是一个 Visual Studio 问题,所以也许你们知道这里发生了什么。

我想在 Visual Studio 2019 项目中使用 ROS 2。为此,我做了以下几件事:

  • C/C++ > 附加包含目录 = C:\dev\ros2_foxy\include
  • 链接器 > 附加库目录 = C:\dev\ros2_foxy\Lib
  • Linker > Input > Additional Dependencies = 中的所有 .lib 文件
  • C:\dev\ros2_foxy\Lib 将所有 .dll 文件复制到 bin 输出

然后我将路径 C:/ros2_foxy/install/bin 添加到我的环境路径中。

调用 ROS init 函数工作正常,因此与 ROS 的连接应该没问题。 在 ROS 中,您使用节点进行通信。您自己的节点是从“节点”父类继承的类,并使用节点名称(此处为“pub”)进行初始化,如下所示:

class MinimalPublisher : public rclcpp::Node
{
public:
    MinimalPublisher(): Node("pub"){}
}

在ROS的node.cpp中,节点类是这样定义的:

Node::Node(
  const std::string & node_name,const NodeOptions & options)
: Node(node_name,"",options)
{
}

当我通过代码调试时,node_name 不包含“pub”而是一些随机字符(它们每次都会改变),然后是“p”“u”“b”和“\0”。

enter image description here

因此,我收到“无效节点名称错误。我试图找出添加随机字符的确切位置,但说实话,我找不到比这更早的对 node_name 的引用。

我很高兴知道问题出在哪里。

编辑:节点类的定义并不那么简单,因为它来自 ROS。所有这些在使用 colcon 和命令行构建时都可以正常工作,只有在使用 Visual Studio 构建和运行代码时才会出现问题。但如果您有兴趣,可以找到文档 here 和实现 here

我的测试代码来自“编写发布者”示例 tutorial

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)