ROS2 Topic-Statistics-Tutorial编译出错

ROS2 Topic-Statistics-Tutorial编译出错

根据以下教程学习topic statistics

https://docs.ros.org/en/foxy/Tutorials/Topics/Topic-Statistics-Tutorial.html

下载源码后,进行编译,发现出错。

复现

  1. 根据教程task 1,wget命令下载源码:在这里插入图片描述
  2. 配置CMakeLists.txt
  3. 使用colcon build编译package
  4. 出现“刷屏式”错误:
  5. 在这里插入图片描述

In file included from /usr/include/c++/9/ext/alloc_traits.h:36,
from /usr/include/c++/9/bits/stl_construct.h:61,
from /usr/include/c++/9/memory:64,
from /home/cym/topic_sta/src/cpp_pub/src/member_function_with_topic_statistics.cpp:16:
/usr/include/c++/9/bits/alloc_traits.h: In instantiation of ‘struct std::allocator_traits<std::allocator<const std_msgs::msg::String_<std::allocator >&> >’:
/home/cym/ros2_foxy/install/rclcpp/include/rclcpp/message_memory_strategy.hpp:47:9: required from ‘class rclcpp::message_memory_strategy::MessageMemoryStrategy<const std_msgs::msg::String_<std::allocator >&, std::allocator >’
/home/cym/ros2_foxy/install/rclcpp/include/rclcpp/node_impl.hpp:91:1: required by substitution of ‘template<class MessageT, class CallbackT, class AllocatorT, class CallbackMessageT, class SubscriptionT, class MessageMemoryStrategyT> std::shared_ptr rclcpp::Node::create_subscription(const string&, const rclcpp::QoS&, CallbackT&&, const rclcpp::SubscriptionOptionsWithAllocator&, typename MessageMemoryStrategyT::SharedPtr) [with MessageT = std_msgs::msg::String_<std::allocator >; CallbackT = MinimalSubscriberWithTopicStatistics::MinimalSubscriberWithTopicStatistics()::<lambda(const String&)>&; AllocatorT = std::allocator; CallbackMessageT = const std_msgs::msg::String_<std::allocator >&; SubscriptionT = rclcpp::Subscription<const std_msgs::msg::String_<std::allocator >&, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy<const std_msgs::msg::String_<std::allocator >&, std::allocator > >; MessageMemoryStrategyT = rclcpp::message_memory_strategy::MessageMemoryStrategy<const std_msgs::msg::String_<std::allocator >&, std::allocator >]’
/home/cym/topic_sta/src/cpp_pub/src/member_function_with_topic_statistics.cpp:44:37: required from here
/usr/include/c++/9/bits/alloc_traits.h:400:13: error: forming pointer to reference type ‘const std_msgs::msg::String_<std::allocator >&’
400 | using pointer = _Tp*;

分析

根据以往的经验,出现如此一连串令人蒙圈的报错,很可能是某个环境配置问题等。。不过,不着急检查环境配置等,从事实出发,先看看报错内容

报错内容1在这里插入图片描述
打开源码,查看下16行的内容:
在这里插入图片描述
看不出有什么错误 /(ㄒoㄒ)/~~

再往下看报错内容,貌似源码中内存和指针的错误出现问题??
在这里插入图片描述

这对C++能力要求就很高了O(∩_∩)O,估摸着一时半会也看不出啥来,于是回到教程看看官方解释。。
在这里插入图片描述

官方解释未涉及到报错代码段。。

想着死马当活马医,又尝试检查配置文件:CMakeLists.txt等,重建package,依然报错。编译器诚不欺我,没提到环境配置的问题啊,盲目是解决不了问题的,只是浪费时间。

看到这里其实可以排除环境配置的问题了,那就是代码文件的问题,可是文件是从官方下载的额额。

再看着官方文档和下载来的报错源码,陷入沉思……

代码问题?
在这里插入图片描述
在这里插入图片描述
看着两份应该是一模一样的代码段,突然想进行对比一下,大惊:

竟然对比出 三处不同
在这里插入图片描述
一个引用形式,一个指针形式。进行替换测试,编译成功

对待权威,官方的教程,也要仔细,认真。

解决

  1. 使用官方文档的代码段,替换member_function_with_topic_statistics.cpp 的内容
  2. 重新编译

关于报错的源码,由于目前作者能力有限,无法进行更深层次的分析,比如无法具体分析 上文对比出的三处不同,此处不同用法的差别等。欢迎评论指教(●’◡’●)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值