Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Inclusione reciproca
Forum - C/C++ - Inclusione reciproca

Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Segnala al moderatore
Postato alle 17:54
Sabato, 19/02/2011
A.h include B.h
B.h include A.h

A.cpp viene compilato includendo A.h e B.h (incluso in A.h).

B.cpp non può essere compilato perché non trova la dichiarazione della classe A le cui istanze sono parametri di alcune funzioni membro della classe B.

Io penso che in questo gioco di inclusioni vengano passate al precompilatore le direttive
Codice sorgente - presumibilmente C/C++

  1. #ifndef _A_
  2. #define _A_
  3. class A
  4. {
  5. [...]
  6. };
  7.  
  8. [...]
  9. #endif



e che quindi risulti impossibile includere l'header.

Sinceramente non riesco a venirne fuori :pat:

Ultima modifica effettuata da Giarados il 19/02/2011 alle 17:55


"ché perder tempo a chi più sa più spiace" (Purgatorio, Canto III - v.78)
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:01
Sabato, 19/02/2011
A parte il fatto che sicuramente potresti riscrivere i due headers in un altro modo, risolvendo questo orribile circolo vizioso di dipendenze, la soluzione è in realtà molto semplice:

Negli headers non includere altri headers, ma fai una forward declaration.

Ad esempio se la classe B vuole elementi di tipo A, aggiungi:

class A;

tra le prime righe di B.h.

L'inclusione degli headers completi la fai nei file .cpp e in questo modo risolvi.


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Segnala al moderatore
Postato alle 20:20
Sabato, 19/02/2011
Grazie dell'aiuto :)


"ché perder tempo a chi più sa più spiace" (Purgatorio, Canto III - v.78)
PM Quote