C++ 排序不';我不喜欢我的谓词
我试图通过传递第一个和最后一个项并传递bool谓词来对向量进行排序。我一辈子都不知道我做错了什么。怀疑它缺乏对类的理解。但这真的让我难堪 <>我正在通过加速C++,我在第4章。花了很长一段时间四处阅读,但我一事无成。可能也帮不了我,因为我在课堂上做事情,所以我可以把章节放在一起 我得到的错误是C++ 排序不';我不喜欢我的谓词,c++,C++,我试图通过传递第一个和最后一个项并传递bool谓词来对向量进行排序。我一辈子都不知道我做错了什么。怀疑它缺乏对类的理解。但这真的让我难堪 我正在通过加速C++,我在第4章。花了很长一段时间四处阅读,但我一事无成。可能也帮不了我,因为我在课堂上做事情,所以我可以把章节放在一起 我得到的错误是 error C2064: term does not evaluate to a function taking 2 arguments 在呼叫排序的线路上 因此,在一个标题(Ch4)中,我有以下内容(为了
error C2064: term does not evaluate to a function taking 2 arguments
在呼叫排序的线路上
因此,在一个标题(Ch4)中,我有以下内容(为了您的理智,我已经编辑了这段代码-includes等似乎很高兴-标题和代码在单独的文件中,我使用vs2013,因此它为我整理了所有这些内容)
然后在课堂上:
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;
}
我得到一个错误,说它缺少一个参数列表-但是在我的重载列表中,它没有显示一个接受参数列表的
因此,我遵循它的建议并将其用作参考,然后返回到原始错误消息
所以我对两件事感到困惑:
1) 为什么我的代码不起作用-如何修复
2) 这些错误消息告诉了我什么,为什么它们似乎在谈论一个不存在或对我隐藏的重载?问题是您的
比较功能是非静态的。您要么需要将其设置为自由函数,要么将其设置为静态。compare
是一种非静态方法
使其静态
:
static bool compare(const Student_Info& x, const Student_Info& y);
将比较函数声明为静态。它必须是一个函子-函数指针、lambda或重载了运算符()的类型。
sort(students.begin(), students.end(), Ch4::compare);
static bool compare(const Student_Info& x, const Student_Info& y);