当前位置: 首页 > 知识库问答 >
问题:

在对象向量上使用std::sort在编译器上不起作用

祁彬
2023-03-14

我正在尝试对对象的向量进行排序。我编写了一个函数来比较对象。它似乎在我的编译器上运行得很好,但不是我学校服务器上的编译器。

bool sortByLastName(Student& lhs, Student& rhs) {
     string lhsLastName = lhs.getLastName();
     string rhsLastName = rhs.getLastName();
     return lhsLastName < rhsLastName;
}

我收到这个错误。。。

/usr/lib/gcc/i686 redhat linux/4.4.7/../../../..//包括/c/4.4.7/bits/stl\U algo。h: 131:错误:“Student”类型引用的初始化无效

/usr/lib/gcc/i686 redhat linux/4.4.7/../../../..//包括/c/4.4.7/bits/stl\U algo。h: 133:错误:“Student”类型引用的初始化无效

我试图使参数为常量字符串

LAB9花名册。cpp:79:错误:将“const Student”作为“std::string Student::getLastName()”的“this”参数传递将丢弃限定符

LAB9花名册。cpp:80:错误:将“const Student”作为“std::string Student::getLastName()”的“this”参数传递将丢弃限定符

共有2个答案

姬宝
2023-03-14

我确信您正在传递临时参数,如sortByLastName(“s1”、“s2”)。然而,尽管我怀疑它是否能在某些编译器上工作,但大多数非常量引用不会绑定到临时对象。使用

bool sortByLastName(const Student& lhs,const Student& rhs) {
     string lhsLastName = lhs.getLastName();
     string rhsLastName = rhs.getLastName();
     return lhsLastName < rhsLastName;
}

此外,正如@user3435400所提到的,将getLastName()定义为const,即它不能修改任何类成员

string getLastName() const;
梁丘翔
2023-03-14

将getLastName定义为

string getLastName() const;

并返回

return lhs.getLastName() < rhs.getLastName();
 类似资料: