ros自定义话题(相关搜索:表达式)

img


请问为什么会报错,在箭头前期待一个主元表达式,照着哔站上赵虚左视频做的

直接百度可以有一些类似的答案 第一 可以把结构定义贴出来 第二 换个名字试试 person

【以下回答由 GPT 生成】

首先,感谢您提供的信息。根据您描述的问题,出现"在箭头前期待一个主元表达式"的错误通常是因为在使用箭头运算符(->)时,没有正确引用一个指针对象。

在您提供的代码中,根据您的描述,我注意到问题可能出现在以下代码行中:

ROS_INFO("订阅人的消息:%s,%d,%.2f", person->name.c_str(), person->age, person->height);

有几种可能的原因可以导致这个错误:

  1. person 指针对象没有被正确初始化。
  2. person 指针对象可能为空,没有有效的内存地址。
  3. Person 类的定义可能不正确。

为了解决这个问题,您可以尝试以下步骤:

  1. 确保您正确包含了 plumbing_pub_sub/Person.h 头文件,以确保 Person 类的定义已经被引入。
  2. 确保您的消息发布者正确发布了 Person 类型的消息,以确保在订阅者端可以正确接收到消息。
  3. 检查代码中对 person 指针对象的初始化,确保它被正确初始化。如果没有初始化,将导致在使用箭头运算符时出现错误。
  4. doPerson 函数中,在使用箭头运算符之前,确保您先检查 person 是否为空指针,以避免出现空指针错误。

以下是修改后的代码,其中包括了对上述步骤的实施:

#include <ros/ros.h>
#include <plumbing_pub_sub/Person.h>

void doPerson(const plumbing_pub_sub::Person::ConstPtr& person)
{
    if (person != nullptr) {  // 检查 person 是否为空指针
        ROS_INFO("订阅人的消息:%s,%d,%.2f", person->name.c_str(), person->age, person->height);
    } else {
        ROS_WARN("接收到空指针对象");
    }
}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");

    ROS_INFO("订阅方实现");

    ros::init(argc, argv, "jiaZhang");
    ros::NodeHandle nh;

    ros::Subscriber sub = nh.subscribe("liaoTian", 10, doPerson);

    ros::spin();
    return 0;
}

请尝试使用以上修改后的代码,并重新编译和运行您的程序,查看是否还会出现相同的错误。如果问题仍然存在,请提供错误的完整输出信息和相关的代码,以便我们可以更好地帮助您解决问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^