2014-04-25 15 views
5

ho questo errore:errore del compilatore C4430: manca indicatore di tipo - int assunto

"Errore C4430: manca indicatore di tipo - int assunto Nota: C++ non supporta default-int".

con questo codice esempio:

//A.h  
#include "B.h" 
class A{ 
    B* b; 
    .. 
}; 

//B.h 
#include "A.h" 
class B{ 
    A* a; // error error C4430: missing type specifier - int assumed. 
}; 
+5

È necessario inoltrare la dichiarazione di classe A nel file di intestazione B.h prima che inizi a essere utilizzato. –

+7

Due intestazioni tra loro non sono una buona idea. "Per capire A devi prima capire B." "Per capire B, devi prima capire A." –

+1

ma ne ho bisogno! come risolvere questo problema? – user3571201

risposta

17

Questo è un problema circular dependency. Per dichiarare un puntatore a qualche classe, la definizione della classe non è necessaria; cioè il tipo non deve essere un complete type. Quindi non è necessario includere A.h in B.h, forward declaration è sufficiente. Ad esempio:

//B.h 
class A; // change the include of A.h to forward declaration 
class B { 
    A* a; 
}; 
+0

ma ho bisogno di usare le funzioni di classe A in classe B! e nel tuo stato non posso farlo! – user3571201

+2

@user: puoi, non solo nell'intestazione. Nel file di implementazione di B, (il .cpp), puoi includere entrambe le intestazioni, a quel punto puoi accedere a tutti i metodi e membri in A. – Cameron

+0

@ user3571201 Usi le funzioni di classe 'A' nella classe' B' Funzioni membro? In tal caso, è possibile definire le funzioni membro 'B' in' B.cpp', in cui includere 'A.h'. – songyuanyao

Problemi correlati