我想用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 type
mtree-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&
。)