sort不喜欢我的谓词

时间:2014-06-12 11:40:43

标签: c++

我试图通过传递第一个和最后一个项并传递bool谓词来对矢量进行排序。不能为我的生活弄清楚我做错了什么。怀疑它缺乏对课程的理解。但它确实让我难过。

我正在加速c ++,我正在第4章。花了很多时间阅读,但我没有到达任何地方。可能并没有帮助我,我正在上课,所以我可以保持章节并排。

我得到的错误是

error C2064: term does not evaluate to a function taking 2 arguments

在调用sort的行上。

所以在标题(Ch4)中我有以下内容(我为了你的理智编辑了这段代码 - 包含等似乎很高兴 - 标题和代码在单独的文件中并使用vs2013所以它排序了所有那些对我来说)

class Ch4
{
public:
    int Ch4::Run();
    struct Student_Info;
    bool compare(const Student_Info& x, const Student_Info& y);
}

然后在课堂上:

struct Ch4::Student_Info
{
    string name;
    double midterm, final;
    vector<double> homework;
};

int Ch4::Run()
{
    vector<Student_Info> students;
    ... code that populates it
    sort(students.begin(), students.end(), compare);
}

bool Ch4::compare(const Student_Info& x, const Student_Info& y)
{
    return x.name < y.name;
}

当我将该行更改为

sort(students.begin(), students.end(), Ch4::compare);

我得到一个错误,说它缺少一个参数列表 - 但是在我的重载列表中,它没有显示一个带参数列表。

因此,我遵循其建议并将其用作参考,然后我回到原始错误消息。

所以我对两件事感到困惑: 1)为什么我的代码不起作用 - 如何解决它 2)这些错误消息告诉我什么,他们为什么似乎谈论一个不存在或对我隐藏的重载?

2 个答案:

答案 0 :(得分:1)

问题是您的compare功能是非静态的。你需要让它成为一个自由函数,或者让它成为静态函数。

答案 1 :(得分:1)

compare是一种非静态方法

将其设为static

static bool compare(const Student_Info& x, const Student_Info& y);