reference to non-static member function must be called

今天在刷LeetCode一道水题的时候,遇到了报错:reference to non-static member function must be called

代码如下:

class Solution {
public:
    static bool cmp(int a,int b)//问题出在这个函数
    {
        return a<b;
    }
    vector<int> sortedSquares(vector<int>& A)
    {
        vector<int> ans(A.size(),0);
        for (int i=0;i<A.size();i++) 
        {
            ans[i]=A[i]*A[i];
        }
        sort(ans.begin(),ans.end(),cmp);//报错位置,说非静态成员函数必须要通过类调用
        return ans;
    }
};

百度了之后,告诉我类里面函数不加static定义为静态成员函数就会隐含变量this指针,与sort函数所调用cmp所需变量不同,故报错,所以这里加上static就解决了问题。

静态成员函数:

无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加->;)调用,这时将向函数传递this指针.而静态函数由类名(::)(或对象名.)调用,但静态函数不传递this指针,不识别对象个体,所以通常用来对类的静态数据成员操作.

程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。

类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

意思就是静态成员函数属于类但不属于对象,可以被多个对象共享,优先于对象生成。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值