c ++类可以将自己包含为成员吗?

时间:2010-04-24 21:02:44

标签: c++

我正在尝试通过在C ++中编写python例程来加速它,然后使用ctypes或cython来使用它。

我是c ++的新手。我正在使用Microsoft Visual C ++ Express,因为它是免费的。

我计划实现一个表达式树,以及一个以后缀顺序评估它的方法。

我遇到的问题是:

class Node {
    char *cargo;
    Node left;
    Node right;
};

我无法将leftright声明为Node类型。

4 个答案:

答案 0 :(得分:79)

不,因为对象会无限大(因为每个Node都有两个Node个成员作为成员,每个对象都有两个Node对象作为成员,每个对象都有...嗯,你明白了。)

但是,您可以将类类型的指针作为成员变量:

class Node {
    char *cargo;
    Node* left;   // I'm not a Node; I'm just a pointer to a Node
    Node* right;  // Same here
};

答案 1 :(得分:31)

为了完整起见,请注意,类可以包含自身的静态实例:

class A
{
    static A a;
};

这是因为静态成员实际上并不存储在类实例中,所以没有递归。

答案 2 :(得分:10)

不,但它可以有一个引用或指向自身的指针:

class Node
{
    Node *pnode;
    Node &rnode;
};

答案 3 :(得分:1)

您应该使用一个指针,并对其进行更好的初始化:

class Node {
    char * cargo = nullptr;
    Node * left = nullptr;
    Node * right = nullptr;
};