1

クラスを使用して、C++ で一般的なツリー構造を実装したい! - そして、このツリーは、キー (私の場合は整数) と leftChild および rightChild 属性で構成されています。これらの属性は、ツリー自体と同じ型である必要があります。

CI では、次のようにできます。

typedef struct avl {
    int key;
    int bf;
    struct avl *leftChild;
    struct avl *rightChild;
} AVLTree;

そして、C++ コードで次のことを試みました。

class MTree {
    public:
        int key;
        int bf;

        MTree leftChild;
        MTree rightChild;

        MTree() {}
        ~MTree() {};
 }

しかし、うまくいかず、次のエラーメッセージが表示されます。

mtree-ops.cpp:12: error: field ‘leftChild’ has incomplete type

mtree-ops.cpp:13: error:error: field ‘rightChild’ has incomplete type

ほら、クラスが独自の型の属性を持っているとは言えないようです。それは、定義時に実際には存在しないものを参照しようとするようなものだからです。これは、C++ クラスを使用してどのように行うことができますか?

4

3 に答える 3

5

(コメントはまだ投稿できません。)

要するに、それ自身のMTree leftChild2 つのMTree子があり、それぞれが 2 つの子を持つということです。したがって、MTreeオブジェクトには無限に多くのMTreeインスタンスが含まれるため、オブジェクトは無限に大きくなります。

本質的に同一のこの質問を参照してください。MTreeそこで述べたように、個々のオブジェクトに有限サイズを与えて、子への参照またはポインタに頼らなければなりません。例えば、

class MTree
{
[...]
public:
    MTree* leftChild;
    MTree* rightChild;
};

( に置き換えることができMTree*ますMTree&。)

于 2013-06-29T01:53:16.910 に答える
0

あなたのコードは次のようになるはずです

class MTree {
    public:
        int key;
        int bf;

        MTree * leftChild;
        MTree * rightChild;

        MTree() {}
        ~MTree() {};
}
于 2013-06-29T01:56:13.643 に答える