微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决传递给类初始化时 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 举报,一经查实,本站将立刻删除。