2016-06-11 86 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和一个运算符。

相关问题