2016-06-11 3 views
0

クラス内で定義されている場合、カスタム比較関数でstd :: sort関数を使用する際に問題があります。私は次のエラーメッセージを取得std :: sort関数のカスタム比較関数の結果エラー:非静的メンバー関数への参照を呼び出す必要があります

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); 
} 

:私はしかし、(比較)とsortMatrix(定義すると、任意のクラスなしのファイルmain.cppにして)

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

を、すべてが正常に動作します。私は何か助けと提案を感謝します。

+0

メンバー関数を 'Test'クラス呼び出しオペレータに変更することはできません。代わりに' sort() 'に' Test'を渡すことはできません: 'sort(vec.begin()、vec.end()、Test ); ' –

答えて

0

compareに電話するには、Fieldオブジェクトが必要です。

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

またはちょうどあなたの比較方法は、クラスの外に移動し、あなたはそれがとにかくメンバーのアクセスする必要はありません。あなたは、ラムダあなたがC++ 11のサポートを持っている場合はそこにあるからそれを呼び出すを使用することができます。

+0

ありがとう、私はこれを試してみます。 compareは実際にTestの関数であると考えられますが、私はtypoを作成しました。 bool Test :: compare(.. – Lennart

0

πάνταῥεcommentのコメントありがとうございます。 ヒントがうまく動作し、クラス比較を使用して終了し、演算子を呼び出しました。

関連する問題