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指針,不識別對象個體,所以通常用來對類的靜態數據成員操作.

程序最終都將在內存中執行,變量只有在內存中佔有一席之地時才能被訪問。

類的靜態成員(變量和方法)屬於類本身,在類加載的時候就會分配內存,可以通過類名直接去訪問;非靜態成員(變量和方法)屬於類的對象,所以只有在類的對象產生(創建類的實例)時纔會分配內存,然後通過類的對象(實例)去訪問。

意思就是靜態成員函數屬於類但不屬於對象,可以被多個對象共享,優先於對象生成。

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