1

メンバー関数コンパレーターを使用してクラス オブジェクトの配列を並べ替えようとしている次のコードの何が問題なのかわかりません。

class Query {
    public:
        int start;
        int end;
        int index;
        bool operator<(const Query &b) {
            return this->start < b.start;
        }
};

Query query[q];

for (int i=0;i<q;++i) {
    cin>>query[i].start>>query[i].end;
    query[i].index = i;
}
sort(query,query+q);

次のエラーが表示されます。

エラー: 'sort(main()::Query [(((unsigned int)(((int)q) + -0x00000000000000001)) + 1)], main()::Query*)' の呼び出しに一致する関数がありません</p>

更新: エラーの原因がわかりました。クラスをメインに含めました。クラス定義をメインの外に移動したところ、問題は解決しました。なぜこれが起こるのかを理解するのに十分な C++/OOP の理解がありません。誰かが説明したり、役立つリソースに案内してくれたりしてくれれば幸いです。

4

1 に答える 1

2

C++03 では、ローカル型 (つまり、関数内で定義された型) をテンプレート引数として使用できません (のテンプレート引数の 1 つは、std::sort()並べ替えが必要なオブジェクトの型です)。C++0 にこの制限がある理由はわかりません。C++11 には、この制限がなくなりました。

于 2013-09-21T19:08:02.007 に答える