如何解决排序向量时出现 "expected a ; " 错误?

How to solve "expected a ; " error when sorting a vector?

我正在尝试使用排序方法对向量进行排序。

这是我的代码

bool compare(const student * a, const student* b) 
{
    return *a.mark < *b.mark || (a.mark == b.mark && a.name < b.name);
}
sort(total_student.begin(), total_student.end(), compare);

我在 return 之前收到错误消息 expected a ';',知道为什么我会收到此错误消息吗?

您在另一个函数中定义了函数 compare,或者错误的原因是函数定义行之前的另一个语法错误。

您不能在另一个函数中定义一个函数。您可以定义 lambda 表达式而不是函数。

将函数定义放在命名空间中。

此外,由于成员访问不正确,函数定义无效。至少你应该写

bool compare(const student *a, const student *b) 
{
    return a->mark < b->mark || (a->mark == b->mark && a->name < b->name); 
}

另外,您有一个指针向量,这看起来令人困惑。如果您有一个 student 类型的对象向量,那么函数定义将类似于

bool compare(const student &a, const student &b) 
{
    return a.mark < b.mark || (a.mark == b.mark && a.name < b.name); 
}

或者你可以这样写

#include <tuple>

//...

bool compare(const student &a, const student &b) 
{
    return std::tie( a.mark, a.name )  < std::tie( b.mark, b.name ); 
}