2016-06-11 43 views
0

在類中定義時,我無法使用std :: sort函數和自定義比較函數。std ::使用自定義比較函數的排序函數結果錯誤:必須調用對非靜態成員函數的引用

class Test { 
    private: 
     vector< vector<int> > mat; 
     bool compare(vector<int>, vector<int>); 
    public: 
     void sortMatrix(); 
} 

bool Field::compare(vector<int> a, vector<int> b) { 
    return (a.back() < b.back()); 
} 

void Test::sortMatrix() { 
    sort(vec.begin(), vec.end(), compare); 
} 

我收到以下錯誤信息:

error: reference to non-static member function must be called 
     sort(vec.begin(), vec.end(), compare); 
            ^~~~~~~ 

當我不過限定了比較()和sortMatrix()在文件main.cpp中沒有任何類,一切工作正常。我將不勝感激任何幫助和建議。

+0

你不能在那裏使用一個成員函數,把它改爲'Test'類調用操作符,並將'Test'傳遞給'sort()':sort(vec.begin(),vec.end(),Test );' –

回答

0

要撥打compare,您需要一個Field對象。你可以使用lambda在那裏打電話,如果你有C++ 11的支持:

sort(vec.begin(), vec.end(), [this] (vector<int> a, vector<int> b) { 
    return compare(a, b); }); 

或者只是將你的比較方法了之類的,你並不需要訪問它的成員呢。

+0

謝謝,我會試試這個。 比較實際上是假設爲Test的一個函數,我犯了一個錯字。 bool Test :: compare(.. – Lennart

0

謝謝你的評論πάνταῥεῖ。 你的提示工作得很好,我最終使用了一個類Compare和一個運算符。

相關問題