我试图通过传递第一个和最后一个项并传递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)这些错误消息告诉我什么,他们为什么似乎谈论一个不存在或对我隐藏的重载?
答案 0 :(得分:1)
问题是您的compare
功能是非静态的。你需要让它成为一个自由函数,或者让它成为静态函数。
答案 1 :(得分:1)
compare
是一种非静态方法
将其设为static
:
static bool compare(const Student_Info& x, const Student_Info& y);