2012-12-29 146 views
3

我在任何地方都看到過這種類型的錯誤,雖然我看過答案,但似乎沒有任何幫助。C++:尚未申報

我得到了下面的一段代碼以下錯誤:

錯誤: 'A' 還沒有被宣佈

了Bh:

#include "A.h" 
class B{ 
    public: 
     static bool doX(A *a); 
}; 

啊:

include "B.h" 
class A{}; 

運行我已經嘗試過的事項清單: - 名稱拼寫ED正確 - 一個是A.H - 有沒有命名空間 - 無模板 - 無宏

我還有其他的班級,能找到就好了。我能想到的唯一的事情是'靜態'正在引發一個問題。

+3

不A.H包括B.h? (它不應該) – Pubby

+0

啊 - 是的,它似乎確實如此。 – aoi

回答

10

與向前聲明替換include

//B.h 
class A; 
class B{ 
    public: 
     static bool doX(A *a); 
}; 

包含文件只有當你不得不這樣做。

另外,使用包括警衛。這將防止其他討厭的問題,如重新定義&等。

6

如果您有兩個包含對方的標頭,那麼最終會產生循環依賴關係,並且由於預處理器的工作方式,這意味着其中一個將被定義。

要解決,我會避免包括A.H在B.h,只是向前聲明代替:

class A; 
class B{ 
    public: 
     static bool doX(A *a); 
}; 

然後,您可以包括在A.H B.cpp