Può una class c ++ includersi come membro?

Sto cercando di velocizzare una routine python scrivendola in C ++, quindi usandola usando ctypes o cython.

Sono nuovo di zecca in c ++. Sto usando Microsoft Visual C ++ Express come è gratuito.

Ho in programma di implementare un albero di espressioni e un metodo per valutarlo in ordine postfisso.

Il problema in cui mi imbatto subito è:

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

Non posso dichiarare left o right come tipi di Node .

No, perché l’object sarebbe infinitamente grande (poiché ogni Node ha come membri altri due oggetti Node , ciascuno dei quali ha come membri altri due oggetti Node , ognuno dei quali … beh, si ottiene il punto).

Tuttavia, puoi avere un puntatore al tipo di class come variabile membro:

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

Solo per completezza, nota che una class può contenere un’istanza statica di se stessa:

 class A { static A a; }; 

Questo perché i membri statici non sono effettivamente memorizzati nelle istanze di class, quindi non c’è ricorsione.

No, ma può avere un riferimento o un puntatore a se stesso:

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

Dovresti usare un puntatore e meglio inizializzato:

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