error: ‘const _stamp_type’ {aka ‘const class ros::Time’} has no member named ‘name
时间: 2024-03-20 09:38:55 浏览: 21
非常抱歉,我的前一个回答有误。在ROS中,`rosgraph_msgs/Log`消息类型的头部信息是一个`Header`类型,其成员变量包括`seq`、`stamp`和`frame_id`,而没有`name`成员。因此,以下是一个修正后的C++代码示例,用于订阅ROS系统的`/rosout`主题,并从中提取发布者节点的名称:
```cpp
#include <ros/ros.h>
#include <rosgraph_msgs/Log.h>
void callback(const rosgraph_msgs::Log::ConstPtr& msg)
{
std::string node_name = msg->header.frame_id;
ROS_INFO("Received message from node: %s", node_name.c_str());
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe<rosgraph_msgs::Log>("/rosout", 1000, callback);
ros::spin();
return 0;
}
```
在此示例中,我们仍然使用`ros::Subscriber`创建了一个订阅者对象,订阅了ROS系统的`/rosout`主题。当有新的消息到达时,ROS会自动调用回调函数`callback`。在回调函数中,我们使用`msg->header`属性来获取消息头信息,并从中提取发布者节点的名称。由于`frame_id`成员变量在ROS中通常用于保存节点名称,因此我们使用它来获取节点名称。最后,我们使用`ROS_INFO`函数打印出节点名称。