¿Puede una clase c ++ incluirse como miembro?

Estoy tratando de acelerar una rutina de Python escribiéndola en C ++, luego usándola usando ctypes o cython.

Soy nuevo en c ++. Estoy usando Microsoft Visual C ++ Express ya que es gratis.

Planeo implementar un árbol de expresiones y un método para evaluarlo en orden de postfijo.

El problema que encuentro de inmediato es:

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

No puedo declarar left o right como tipos de Node .

No, porque el objeto sería infinitamente grande (porque cada Node tiene como miembros otros dos objetos de Node , cada uno de los cuales tiene como miembros otros dos objetos de Node , cada uno de los cuales … bueno, se entiende el punto).

Sin embargo, puede tener un puntero al tipo de clase como una variable miembro:

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

Para completar, tenga en cuenta que una clase puede contener una instancia estática de sí mismo:

 class A { static A a; }; 

Esto se debe a que los miembros estáticos no se almacenan realmente en las instancias de clase, por lo que no hay recursividad.

No, pero puede tener una referencia o un puntero a sí mismo:

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

Deberías usar un puntero, y mejor inicializado:

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