当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"

Getting error "a nonstatic member reference must be relative to a specific object" while both member are in the same class

本文关键字:reference member nonstatic must be object specific to relative 出错 两个      更新时间:2023-10-16

我知道这个问题被问了很多次,但我仍然被卡住了。我以为我明白了这个错误是什么,显然我没有。

所以,我得到的错误是

a nonstatic member reference must be relative to a specific object

我的代码是:

class theTranslator {
public:
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<sensor_msgs::Image>("camera/depth/image_raw", 100);
static void getMessage(const sensor_msgs::Image::ConstPtr& recMmsg) {
ROS_INFO( "I heard message" );
pub.publish(recMmsg); //*** ERROR IS HERE ***
}
};

既然pubgetMessage()是同一类的一部分,它不应该工作吗?如何使static成员函数使用同一类的变量成员?

附言:这是在ROS(机器人操作系统(中完成的,但我认为这是一个C++错误(与ROS无关(。

在C++中,不能从静态方法访问非静态类成员。让它成为一种正常的方法,并尝试如下:-

void getMessage(const sensor_msgs::Image::ConstPtr& recMmsg){
ROS_INFO( "I heard message" );
pub.publish(recMmsg); //*** ERROR IS HERE ***
}

否则,将pub声明为静态成员

static ros::Publisher pub; 

另请参阅以下答案

C++静态成员函数和变量

您需要使getMessage为非静态,或者使pub为静态。

也许你真正需要做的是重新思考你的设计。为什么要使getMessage静态?作为一个非常普遍的经验法则,静态是一个错误,尤其是对于新手来说。

相关文章: