In casi simili non c'è altro modo se non ricorrere alla forward reference e un puntatore. Infatti il compilatore sa com'è fatto un puntatore, ma non com'è definita la classe del puntatore.
Perché funzioni il tutto è indispensabile che nelle dichiarazioni delle classi (o nell'header file in generale) non si faccia riferimento ai campi (metodi o variabili) della classe incompleta.
Non serve nemmeno fare un giro strano di include, ma è sufficiente usare la forward reference.
Gli include necessari dovranno però essere inseriti nei file rispettivi file.cpp prima che metodi o variabili della classe in forward reference siano usati.
file A.h
file B.hcodice:class B; // forward reference class A { static B* punt; };
file A.cppcodice:class A; // forward reference class B { funzione1(A*...); funzione2(A*...); };
file B.cppcodice:#include "A.h" #include "B.h" // ora il compilatore sa com'è fatta sia A sia B // sviluppo funzioni etc. B* A::punt = nullptr;
codice:#include "B.h" #include "A.h" // ora il compilatore sa com'è fatta sia A sia B // sviluppo funzioni etc. B::funzione1(A* arg) { arg->metodo_strano(); }

Rispondi quotando