我想用C++-使用类来实现通用的树形结构! -这棵树由一个键(在我的情况下是整数)和一个leftChild和rightChild属性组成,该属性应与树本身具有相同的类型

在C中,我可以这样做:

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 typemtree-ops.cpp:13: error:error: field ‘rightChild’ has incomplete type
如此看来,我不能说我的类具有其自身类型的属性,因为这就像试图引用在定义时实际上并不存在的内容一样。如何使用C++类完成此操作?

最佳答案

(我还不能发表评论。)

简而言之,MTree leftChild会有自己的两个MTree子代,每个子代都有两个子代,依此类推。因此,MTree对象将无限大,因为它们将包含无限多个MTree实例。

参见this question,该本质上相同。如此处所述,您必须使用对子项的引用或指针,为各个MTree对象提供有限的大小。例如,

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

(您可以将MTree*替换为MTree&。)

08-18 19:12