0

クラスのオブジェクトを含むセットを作成したいので、カスタム比較を決定する必要があります。残念ながら、私が試したことはすべてうまくいきませんでした。

class My_Class {
    public:
        char letter;
        set<My_Class, compare> Children;
};

Ant 次に、compare 構造体:

struct compare {
    bool operator() (const My_Class& a, const My_Class& b) const{
        return a.letter < b.letter;
    }
};

どうすればこれを機能させることができますか?

現在、問題はその識別子aを表示し、b宣言されていません。

4

2 に答える 2

0

コードの問題は、コンパイルが保証されていないことです。問題はcompare構造体ではないので、それを写真から取り除いてください。これです:

class My_Class {
public:
    char letter;
    set<My_Class, compare> Children;  // it is the set<My_Class> that is the problem
};

My_Class の定義がコンパイラに認識される前に、std::setofを定義しています。My_Classつまり、std::setコンテナ内で不完全な型を使用しています。コードがコンパイルされるという保証はなく、たとえコンパイルされたとしても、現在の動作は未定義です。

不完全な型で動作するコンテナーが必要な場合は、ここで Boost コンテナー型を使用できます:
http://www.boost.org/doc/libs/1_55_0/doc/html/container.html

Boost ドキュメント内の不完全型に関する説明は次のとおりです

于 2014-06-26T16:11:31.067 に答える