2016-06-11 6 views
0

클래스 내에 정의 된 경우 내 맞춤 비교 함수로 std :: sort 함수를 사용하는 데 문제가 있습니다.std :: sort 함수와 사용자 정의 비교 함수 결과 오류 : 비 정적 멤버 함수에 대한 참조를 호출해야합니다.

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

내가 그러나 비교 정의 할 때()와 파일 MAIN.CPP에서 sortMatrix() 모든 클래스하지 않고, 모든 것이 잘 작동 :

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

나는 다음과 같은 오류 메시지가 나타납니다. 나는 어떤 도움이나 제안을 주셔서 감사합니다.

+0

멤버 함수를'Test' 클래스 호출 연산자로 바꾸고'Test'를'sort()'에 대신 쓸 수는 없습니다 :'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의 함수라고 가정합니다. 오타를 만들었습니다. bool Test :: compare (.. – Lennart

0

πάντα ῥε comment에 감사드립니다. 힌트가 잘 작동하고, 클래스 비교를 사용하여 끝내고 연산자를 호출했습니다.