Sto cercando di fare una classe annidata che è anche una sottoclasse di suo genitore:sottoclassi nidificati in C++
struct X { struct Y : public X {}; };
Purtroppo, questo non sembra essere ammessi in C++, come g ++ produce l'errore
error: invalid use of incomplete type 'struct X'
Tuttavia, il mio codice vero e proprio ha X
come una classe template:
template<typename T> struct X
{ struct Y : public X {}; };
ottengo lo stesso messaggio , Ma questa volta è solo un avvertimento:
warning: invalid use of incomplete type 'struct X< T >'
La mia domanda è: perché è il primo caso illegale, mentre il caso su modelli dà solo un avvertimento? La versione del modello funziona esattamente come mi aspetterei che sia (posso creare istanze di , assegnarle a X<T>
e così via), ma l'avviso significa che non dovrei usarlo? Quali problemi posso aspettarmi di incontrare se ignoro l'avviso?
Sospetto che nel secondo caso si verifichi un errore anche quando si tenta di istanziare 'X' –
Utilizzare una dichiarazione di inoltro di X? – LiMuBei
@LiMuBei, non puoi ereditare da una classe incompleta (che è una classe inoltrata). questo è il problema. – StoryTeller