2

我觉得好像我正确地使用了它,但编译器却有不同的感觉。我正在尝试使用 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>)’

提前感谢您的帮助。

4

3 回答 3

8

把函数改成这样:

static bool nameCmp(course a, course b) { return a.name > b.name; }

更好的是通过 const-referencecourse const & a等传递参数。

于 2011-12-08T21:31:04.900 回答
2
     bool SomeClass::nameCmp(course a, course b) {return (a.name > b.name) ? true : false;}

有一个隐式SomeClass *this参数。通过移动声明或使其在类之外创建方法static

于 2011-12-08T21:33:17.227 回答
-1

sort算法不会nameCmp从对象或与类相关的函数中调用该函数,而是从全局命名空间中调用它。您需要将其设为免费功能,或将其设为静态并使用SomeClass::nameCmp.

于 2011-12-08T21:33:04.230 回答