PDA

Visualizza la versione completa : [C++] Mutua inclusione tra oggetti


fabi080
09-11-2005, 20:46
Ciao a tutti, ho un problema non riesco a capire la sintassi esatta per far compilare questo codice, ho due classi ed ognuna deve avere tra i suoi campi un puntatore all'altra, quindi semplificando al massimo ho i seguenti files a.cpp a.h b.cpp b.h il problema in particolare č sui file .h



// file a.h
#include "b.h"

class a {
b *bptr;
};

// file b.h
#include "a.h"

class b {
a *aptr;
};


mentre nei file .cpp posso usare entrambi i tipi senza nessun problema.

Per il momento ho risolto usando in una delle due classi un puntatore a void e facendo i cast nel file cpp, ma sono sicuro che esiste una soluzione migliore.

Qualche idea?

Grazie.

oregon
09-11-2005, 20:55
Potresti scrivere

// file a.h //
class b;

class a {
b *bptr;
};
/////////////

// file b.h //
class a;

class b {
a *aptr;
};
/////////////

fabi080
09-11-2005, 21:02
Allora, ho dimenticato di mettere le ifdef nell'esempio che ho scritto, ma cmq ci sono nei file originali.
Anche includendo i due file nel main il problema si presenta lo stesso. L'errore riportato č:


Node.h:31: error: ISO C++ forbids declaration of 'Network' with no type
Node.h:31: error: expected ';' before '*' token


Dove Network č la classe a e Node la classe b dell'esempio.

oregon
09-11-2005, 21:05
Scusa .. non ti seguo ...

fabi080
09-11-2005, 21:08
Ora con la modifica che hai fatto sembra funzionare, e non ci dovrebbe essere nessun problema, nei file .h in quanto al compilatore basta sapere che a e b sono classi. L'unico problema č che mi perdo le typedef fatte per i container, cmq risolverņ in qualche modo.

Grazie mille.

fabi080
09-11-2005, 21:09
Originariamente inviato da oregon
Scusa .. non ti seguo ...

Avevo letto la risposta prima della modifica, di nuovo grazie.

Loading