c++ - 在 C++ 中具有相同类的属性

标签 c++ class object data-structures

我想用 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: 错误:字段“leftChild”的类型不完整

mtree-ops.cpp:13: error:error: 字段‘rightChild’的类型不完整

所以你看,看起来我不能说我的类有一个属于它自己类型的属性,因为这就像试图引用在定义时并不真正存在的东西。如何使用 C++ 类完成此操作?

最佳答案

(我还不能发表评论。)

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

参见 this question这在本质上是相同的。如此处所述,您必须求助于对子项的引用或指针,从而为单个 MTree 对象提供有限大小。例如,

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

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

关于c++ - 在 C++ 中具有相同类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375887/

相关文章:

C++错误: no match for 'operator<<' (operand types are

c++ - 定义函数

java - 如何子类化 Java Mail Message

java - 如何在main方法中从另一个类创建List对象?

c++ - Leetcode 108.将排序后的数组转换为二进制搜索树

c++ - is_lock_free() 在升级到 MacPorts gcc 7.3 后返回 false

c++ - 如何在 Visual C++ 2010 或 2008 中使用 OpenCV 2.1 访问网络摄像头(compro IP50W)

java - 将类型对象转换为类型数组。 java

c# - 如何比较同一类的两个对象?

特定于 gcc 4.5 的 C++ 数组创建问题