VC ++ 2012上的C ++中的自定义排序函数会为以下代码引发编译错误。

class Segmenter(){
public:
    vector<vector<float>> scanned;
    void modifyAndSort();
    bool sort_fn(const vector<float>&, const vector<float>&);
};

void Segmenter::modifyAndSort(){
    // Modify scanned
    // ...

    sort(scanned.begin(), scanned.end(), sort_fn);
}

bool Segmenter::sort_fn(const vector<float>& x, const vector<float>& y){
    return ((x[0]*x[1]) < (y[0]*y[1]));
}


引发的错误是:

Error   3   error C3867: 'Segmenter::sort_fn': function call missing argument list; use '&Segmenter::sort_fn' to create a pointer to member

最佳答案

你需要:

sort(scanned.begin(), scanned.end(), std::bind(&Segmenter::sort_fn, this));
//                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


不要忘记#include <functional>

关于c++ - 自定义排序比较功能引发编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40314474/

10-12 00:13