rod*_*ves 1 c++ class object data-structures
我想用 C++ 实现一个通用的树结构 - 带有类!- 这棵树由一个键(在我的例子中是一个整数)和一个 leftChild 和 rightChild 属性组成,它们应该与树本身具有相同的类型
\n\n在 CI 中可以这样做:
\n\ntypedef struct avl {\n int key;\n int bf;\n struct avl *leftChild;\n struct avl *rightChild;\n} AVLTree;\nRun Code Online (Sandbox Code Playgroud)\n\n我在我的 C++ 代码中尝试了以下操作:
\n\nclass MTree {\n public:\n int key;\n int bf;\n\n MTree leftChild;\n MTree rightChild;\n\n MTree() {}\n ~MTree() {};\n }\nRun Code Online (Sandbox Code Playgroud)\n\n但它不起作用,并且给我以下错误消息:
\n\nmtree-ops.cpp:12: error: field \xe2\x80\x98leftChild\xe2\x80\x99 has incomplete type
mtree-ops.cpp:13: error:error: field \xe2\x80\x98rightChild\xe2\x80\x99 has incomplete type
所以你看,看起来我不能说我的类有它自己类型的属性,因为这就像试图引用定义时并不真正存在的东西。如何使用 C++ 类来完成此操作?
\n小智 5
(我还不能发表评论。)
简而言之,MTree leftChild会有两个MTree自己的孩子,每个孩子都会有两个孩子,依此类推。因此,MTree对象将无限大,因为它们将包含无限多个MTree实例。
请参阅本质上相同的问题。正如那里提到的,您必须诉诸于子对象的引用或指针,从而为单个MTree对象提供有限的大小。例如,
class MTree
{
[...]
public:
MTree* leftChild;
MTree* rightChild;
};
Run Code Online (Sandbox Code Playgroud)
(您可以替换MTree*为MTree&。)