2

これを正しく使用しているように感じますが、コンパイラはそうではないと感じます。stl sortアルゴリズムを使用して、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 に答える