0

我有以下课程

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&)'

怎么了?

4

2 回答 2

1

在您的真实代码中,看起来您正在传递迭代器而不是比较函数:

(__gnu_cxx::_normal_iterator<foo::baz*, std::vector<foo::baz> >) (foo::baz&, foo::baz&)'

它试图用要比较的元素调用迭代器。那是行不通的。

不过,您显示的代码是正确的:http: //ideone.com/pwo5Cu

于 2013-09-24T09:16:17.443 回答
0

您显示的代码编译得很好。猜测一下,在您的实际代码中cmp解析为 之外的其他内容foo::cmp,从而导致出现问题。

于 2013-09-24T09:18:52.347 回答