我有以下课程
class foo{
private:
struct bar{
double rng;
...
};
struct baz{
bar abar;
...
};
void foobar();
static bool cmp(baz a, baz b);
...
};
cmp函数执行以下操作:
bool foo::cmp(baz a, baz b){
return (a.abar.rng < b.abar.rng);
}
现在我想在foobar函数内部进行排序:
void foo::foobar(){
std::vector<baz> aVec;
// fill aVec
std::sort(aVec.begin(), aVec.end(), cmp);
}
这给出了很多编译错误,第一个是:
> stl_algo.h: no match for call to '(__gnu_cxx::_normal_iterator<foo::baz*,
> std::vector<foo::baz> >) (foo::baz&, foo::baz&)'
怎么了?
答案 0 :(得分:1)
在您的实际代码中,看起来您正在传递迭代器而不是比较函数:
(__gnu_cxx::_normal_iterator<foo::baz*, std::vector<foo::baz> >) (foo::baz&, foo::baz&)'
它正在尝试使用要比较的元素调用迭代器。这不起作用。
您展示的代码是正确的,但是:http://ideone.com/pwo5Cu
答案 1 :(得分:0)
您显示的代码编译得很好。猜测一下,在您的实际代码中cmp
会解析为foo::cmp
以外的其他内容,从而引发相关错误。