我正在尝试通过在C ++中编写python例程来加速它,然后使用ctypes或cython来使用它。
我是c ++的新手。我正在使用Microsoft Visual C ++ Express,因为它是免费的。
我计划实现一个表达式树,以及一个以后缀顺序评估它的方法。
我遇到的问题是:
class Node {
char *cargo;
Node left;
Node right;
};
我无法将left
或right
声明为Node
类型。
答案 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;
};