2014-04-25 69 views
5

我有這樣的錯誤:編譯器錯誤C4430:缺少類型說明符 - 假定爲int

「錯誤C4430:缺少類型說明符 - 假定爲int注意:C++不支持默認int。」

與此代碼例如:

//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

您需要在開始使用之前將A類的前向聲明轉換爲頭文件B.h。 –

+7

兩個包含對方的標題不是一個好主意。 「要理解A,你必須首先理解B」。 「要理解B,你必須首先理解A.」 –

+1

但我需要它! 如何解決這個問題? – user3571201

回答

17

這是一個circular dependency問題。爲了聲明某個類的指針,該類的定義是不需要的;即類型不一定是complete type。 所以你不需要包含A.hB.hforward declaration就足夠了。如:

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

但我需要使用B類中的A類功能! 和在你的狀態我不能這樣做! – user3571201

+2

@user:你可以,只是不在標題中。在B的實現文件(.cpp)中,可以包含兩個標題,在這一點上,您可以訪問A中的所有方法和成員。 – Cameron

+0

@ user3571201您可以在類「B」中使用類「A」的功能,的會員功能?如果是這樣,您可以在'B.cpp'中定義'B'的成員函數,其中包括'A.h'。 – songyuanyao

相關問題