首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取错误“非静态成员引用必须相对于特定对象”,而这两个成员都在同一个类中。

获取错误“非静态成员引用必须相对于特定对象”,而这两个成员都在同一个类中。
EN

Stack Overflow用户
提问于 2018-07-27 09:45:49
回答 2查看 11.1K关注 0票数 3

我知道这个问题问了很多次了,但我还是被困住了。我以为我知道这个错误是什么--很明显,我没有。

所以,我得到的错误是

代码语言:javascript
运行
复制
a nonstatic member reference must be relative to a specific object

我的代码是:

代码语言:javascript
运行
复制
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无关)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 09:54:58

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

代码语言:javascript
运行
复制
 void getMessage(const sensor_msgs::Image::ConstPtr& recMmsg){
        ROS_INFO( "I heard message" );
        pub.publish(recMmsg); //*** ERROR IS HERE ***
    }

否则声明pub为静态成员。

代码语言:javascript
运行
复制
static ros::Publisher pub; 

也请参考下面的答案

C++ static member functions and variables

票数 5
EN

Stack Overflow用户

发布于 2018-07-27 09:57:22

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

也许你真正需要做的是重新考虑你的设计。你为什么要把getMessage变成静态的?作为一个非常普遍的经验法则,静态是一个错误,特别是对于一个新手。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51555228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档