Próbuję zrobić zagnieżdżone klasy, która jest również podklasa jego rodzica:zagnieżdżone podklasy w C++
struct X { struct Y : public X {}; };
Niestety, to nie wydaje się być dozwolone w C++, jak g ++ generuje błąd
error: invalid use of incomplete type 'struct X'
jednak mój rzeczywisty kod ma X
jako matrycy Klasa:
template<typename T> struct X
{ struct Y : public X {}; };
dostaję ten sam komunikat , Ale tym razem to tylko ostrzeżenie:
warning: invalid use of incomplete type 'struct X< T >'
Moje pytanie brzmi: dlaczego to dawna sprawa nielegalne, natomiast na matrycy przypadek po prostu daje ostrzeżenie? Wersja szablonowa działa dokładnie tak, jak oczekiwałbym (mogę tworzyć instancje X<T>::Y
, przesyłać je do X<T>
itd.), Ale czy ostrzeżenie oznacza, że nie powinienem go używać? Jakie problemy mogę napotkać, jeśli zignoruję ostrzeżenie?
Podejrzewam, że otrzymasz błąd również w drugim przypadku, gdy próbujesz faktycznie utworzyć instancję 'X' –
Użyj deklaracji X w przód? – LiMuBei
@LiMuBei, nie możesz dziedziczyć z klasy niekompletnej (która jest przekazywana). to jest problem. – StoryTeller