当两个成员都在同一个 class 时出现错误 "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
我知道这个问题已经被问过很多次了,但我还是卡住了。我以为我明白了这个错误是关于我显然不明白的。
所以,我得到的错误是
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 ***
}
};
因为 pub
和 getMessage()
是同一个 class 的一部分,它不应该起作用吗?如何使 static
成员函数使用同一 class 的变量成员?
P.S。这是在 ROS(机器人操作系统)中完成的,但我认为这是一个 C++ 错误(与 ROS 无关)。
在 C++ 中,您不能从静态方法访问非静态 class 成员。将其设为常规方法并尝试如下所示:-
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++ static member functions and variables
您需要使 getMessage
成为非静态的,或者您需要使 pub
成为静态的。
可能您真正需要做的是重新考虑您的设计。为什么要使 getMessage
静态化?作为一个非常普遍的经验法则,静态是一个错误,特别是对于新手。
我知道这个问题已经被问过很多次了,但我还是卡住了。我以为我明白了这个错误是关于我显然不明白的。
所以,我得到的错误是
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 ***
}
};
因为 pub
和 getMessage()
是同一个 class 的一部分,它不应该起作用吗?如何使 static
成员函数使用同一 class 的变量成员?
P.S。这是在 ROS(机器人操作系统)中完成的,但我认为这是一个 C++ 错误(与 ROS 无关)。
在 C++ 中,您不能从静态方法访问非静态 class 成员。将其设为常规方法并尝试如下所示:-
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++ static member functions and variables
您需要使 getMessage
成为非静态的,或者您需要使 pub
成为静态的。
可能您真正需要做的是重新考虑您的设计。为什么要使 getMessage
静态化?作为一个非常普遍的经验法则,静态是一个错误,特别是对于新手。