鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    HelloFish例程

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    hellofish例程 使用dds进行订阅发布
    3
    6
    458
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 4
      401772473
      最后由 编辑

      我想问一下我按小鱼的教程进行HelloFishros例程进行make编译,怎么会出现这样的错误:
      sunboy@sunboy-desktop:~/dds_tutorial/examples/01-hellofishros/build$ make
      Consolidate compiler generated dependencies of target DDSHelloFishRosPublisher
      [ 12%] Building CXX object CMakeFiles/DDSHelloFishRosPublisher.dir/src/idl_generate/HelloFishRosPubSubTypes.cxx.o
      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx: In member function ‘virtual bool HelloWorldPubSubType::serialize(void*, SerializedPayload_t*)’:
      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx:61:108: error: ‘DDS_CDR’ is not a member of ‘eprosima::fastcdr::Cdr’
      61 | er(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr::DDS_CDR);
      | ^~~~~~~

      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx:77:49: error: ‘class eprosima::fastcdr::Cdr’ has no member named ‘getSerializedDataLength’; did you mean ‘get_serialized_data_length’?
      77 | payload->length = static_cast<uint32_t>(ser.getSerializedDataLength());
      | ^~~~~~~~~~~~~~~~~~~~~~~
      | get_serialized_data_length
      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx: In member function ‘virtual bool HelloWorldPubSubType::deserialize(SerializedPayload_t*, void*)’:
      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx:92:110: error: ‘DDS_CDR’ is not a member of ‘eprosima::fastcdr::Cdr’
      92 | er(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr::DDS_CDR);
      | ^~~~~~~

      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx: In member function ‘virtual bool HelloWorldPubSubType::getKey(void*, InstanceHandle_t*, bool)’:
      /home/sunboy/dds_tutorial/examples/01-hellofishros/src/idl_generate/HelloFishRosPubSubTypes.cxx:154:65: error: ‘class eprosima::fastcdr::Cdr’ has no member named ‘getSerializedDataLength’; did you mean ‘get_serialized_data_length’?
      154 | m_md5.update(m_keyBuffer, static_cast<unsigned int>(ser.getSerializedDataLength()));
      | ^~~~~~~~~~~~~~~~~~~~~~~
      | get_serialized_data_length
      make[2]: *** [CMakeFiles/DDSHelloFishRosPublisher.dir/build.make:104: CMakeFiles/DDSHelloFishRosPublisher.dir/src/idl_generate/HelloFishRosPubSubTypes.cxx.o] Error 1
      make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/DDSHelloFishRosPublisher.dir/all] Error 2
      make: *** [Makefile:91: all] Error 2

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从你提供的编译错误信息来看,问题主要集中在 eprosima::fastcdr::Cdr 类的使用上。这里有几个关键的错误点:

        1. DDS_CDR 不是 eprosima::fastcdr::Cdr 的成员:
          DDS_CDR 看起来像是一个可能已经被弃用或不存在的枚举值。在 eprosima::fastcdr::Cdr 中,通常使用 Cdr::DEFAULT_ENDIAN 或 Cdr::BIG_ENDIAN 来指定字节序。你应该检查你的代码或相关库文档,看看是否应该使用其他值或者这个值是否应该被完全省略(因为有时默认行为就足够了)。

        2. getSerializedDataLength 方法不存在:
          错误提示 class eprosima::fastcdr::Cdr has no member named ‘getSerializedDataLength’; did you mean ‘get_serialized_data_length’?表明Cdr类中没有getSerializedDataLength这个方法,但有一个可能的方法get_serialized_data_length。你应该将代码中的 getSerializedDataLength()替换为get_serialized_data_length()`。

        解决步骤

        1. 修改 HelloFishRosPubSubTypes.cxx 中的 Cdr 使用:

          • 移除或替换 DDS_CDR 的使用。检查 eprosima::fastcdr::Cdr 的文档或源代码,了解正确的初始化方式。
          • 将 getSerializedDataLength() 替换为 get_serialized_data_length()。
        2. 重新编译:

          • 保存修改后的文件。
          • 在你的构建目录(这里是 ~/dds_tutorial/examples/01-hellofishros/build)中,重新运行 make 命令。
        3. 检查依赖和版本:

          • 确保你使用的 eProsima Fast CDR 库版本与你的代码或教程相匹配。
          • 如果你是从某个教程或示例代码开始,确保所有依赖都已正确安装,并且版本兼容。
        4. 查阅文档和社区:

          • 如果问题仍然存在,查阅 eProsima Fast CDR 的官方文档或社区论坛。
          • 也可以尝试搜索是否有其他人遇到过类似的问题,并找到了解决方案。

        通过这些步骤,你应该能够解决编译时出现的错误。如果问题依旧,请提供更多的上下文信息,如你使用的库版本、操作系统等,以便进一步分析问题。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @401772473
          最后由 编辑

          @401772473 看新教程看新教程

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          4 1 条回复 最后回复 回复 引用 0
          • 4
            401772473 @小鱼
            最后由 401772473 编辑

            @小鱼 你说的新教程的链接能发我一下吗?是说的下面这个吗?
            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            小鱼小 1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @401772473
              最后由 编辑

              @401772473 是这个

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              4 1 条回复 最后回复 回复 引用 0
              • 4
                401772473 @小鱼
                最后由 编辑

                @小鱼 好的小鱼。

                1 条回复 最后回复 回复 引用 0
                • 第一个帖子
                  最后一个帖子
                皖ICP备16016415号-7
                Powered by NodeBB | 鱼香ROS