我觉得好像我正确使用它,但编译器感觉不然。我正在尝试使用stl排序算法在sort_by_name函数中按字母顺序对课程列表进行排序。这大致是我写的:
class SomeClass {
private:
struct course {
string id, name;
};
vector<course> COURSES;
bool nameCmp(course a, course b) {return (a.name > b.name) ? true : false;}
public:
void sort_by_name() {
sort(COURSES.begin(), COURSES.end(), nameCmp);
}
};
错误:
error: no matching function for call to ‘sort(std::vector<SomeClass::course>::iterator, std::vector<SomeClass::course>::iterator, <unresolved overloaded function type>)’
提前感谢您的帮助。
答案 0 :(得分:8)
将功能更改为:
static bool nameCmp(course a, course b) { return a.name > b.name; }
更好的方法是通过const-reference,course const & a
等传递参数。
答案 1 :(得分:2)
bool SomeClass::nameCmp(course a, course b) {return (a.name > b.name) ? true : false;}
具有隐式SomeClass *this
参数。通过移动声明或使其成为static
来使类外的方法。
答案 2 :(得分:-1)
sort
算法不会从一个对象或与该类相关的函数调用nameCmp
函数,而是从全局命名空间调用它。您需要将其设为自由函数,或将其设为静态函数并使用SomeClass::nameCmp
。