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命令下载源码:ROS2 Topic-Statistics-Tutorial编译出错_第1张图片
  2. 配置CMakeLists.txt
  3. 使用colcon build编译package
  4. 出现“刷屏式”错误:
  5. ROS2 Topic-Statistics-Tutorial编译出错_第2张图片

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&> >’:
/home/cym/ros2_foxy/install/rclcpp/include/rclcpp/message_memory_strategy.hpp:47:9: required from ‘class rclcpp::message_memory_strategy::MessageMemoryStrategy&, std::allocator >’
/home/cym/ros2_foxy/install/rclcpp/include/rclcpp/node_impl.hpp:91:1: required by substitution of ‘template 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_; CallbackT = MinimalSubscriberWithTopicStatistics::MinimalSubscriberWithTopicStatistics()::&; AllocatorT = std::allocator; CallbackMessageT = const std_msgs::msg::String_&; SubscriptionT = rclcpp::Subscription&, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy&, std::allocator > >; MessageMemoryStrategyT = rclcpp::message_memory_strategy::MessageMemoryStrategy&, 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_&’
400 | using pointer = _Tp*;

分析

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

报错内容1ROS2 Topic-Statistics-Tutorial编译出错_第3张图片
打开源码,查看下16行的内容:
ROS2 Topic-Statistics-Tutorial编译出错_第4张图片
看不出有什么错误 /(ㄒoㄒ)/~~

再往下看报错内容,貌似源码中内存和指针的错误出现问题??

这对C++能力要求就很高了O(∩_∩)O,估摸着一时半会也看不出啥来,于是回到教程看看官方解释。。
ROS2 Topic-Statistics-Tutorial编译出错_第5张图片

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

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

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

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

代码问题?
ROS2 Topic-Statistics-Tutorial编译出错_第6张图片
ROS2 Topic-Statistics-Tutorial编译出错_第7张图片
看着两份应该是一模一样的代码段,突然想进行对比一下,大惊:

竟然对比出 三处不同
ROS2 Topic-Statistics-Tutorial编译出错_第8张图片
一个引用形式,一个指针形式。进行替换测试,编译成功

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

解决

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

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

你可能感兴趣的:(ROS2-学习笔记,c++,开发语言,后端)