直接百度可以有一些类似的答案 第一 可以把结构定义贴出来 第二 换个名字试试 person
【以下回答由 GPT 生成】
首先,感谢您提供的信息。根据您描述的问题,出现"在箭头前期待一个主元表达式"的错误通常是因为在使用箭头运算符(->)时,没有正确引用一个指针对象。
在您提供的代码中,根据您的描述,我注意到问题可能出现在以下代码行中:
ROS_INFO("订阅人的消息:%s,%d,%.2f", person->name.c_str(), person->age, person->height);
有几种可能的原因可以导致这个错误:
person
指针对象没有被正确初始化。person
指针对象可能为空,没有有效的内存地址。Person
类的定义可能不正确。为了解决这个问题,您可以尝试以下步骤:
plumbing_pub_sub/Person.h
头文件,以确保 Person
类的定义已经被引入。Person
类型的消息,以确保在订阅者端可以正确接收到消息。person
指针对象的初始化,确保它被正确初始化。如果没有初始化,将导致在使用箭头运算符时出现错误。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;
}
请尝试使用以上修改后的代码,并重新编译和运行您的程序,查看是否还会出现相同的错误。如果问题仍然存在,请提供错误的完整输出信息和相关的代码,以便我们可以更好地帮助您解决问题。
【相关推荐】