Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 排序不';我不喜欢我的谓词_C++ - Fatal编程技术网

C++ 排序不';我不喜欢我的谓词

C++ 排序不';我不喜欢我的谓词,c++,C++,我试图通过传递第一个和最后一个项并传递bool谓词来对向量进行排序。我一辈子都不知道我做错了什么。怀疑它缺乏对类的理解。但这真的让我难堪 我正在通过加速C++,我在第4章。花了很长一段时间四处阅读,但我一事无成。可能也帮不了我,因为我在课堂上做事情,所以我可以把章节放在一起 我得到的错误是 error C2064: term does not evaluate to a function taking 2 arguments 在呼叫排序的线路上 因此,在一个标题(Ch4)中,我有以下内容(为了

我试图通过传递第一个和最后一个项并传递bool谓词来对向量进行排序。我一辈子都不知道我做错了什么。怀疑它缺乏对类的理解。但这真的让我难堪

<>我正在通过加速C++,我在第4章。花了很长一段时间四处阅读,但我一事无成。可能也帮不了我,因为我在课堂上做事情,所以我可以把章节放在一起

我得到的错误是

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);