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指针,不识别对象个体,所以通常用来对类的静态数据成员操作.

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章