2011-02-22 51 views
1

我在嘗試使用Xcode中的某個類的前向聲明時出現問題。在Xcode中使用類的前向聲明時發生錯誤

這裏是我的基本架構:

MyClassA.h:

class MyClassA{ 
    ... list of members and method prototypes ... 
}; 

MyClassA.cpp:

#include "MyClassA.h" 

--- list of methods for MyClassA ... 

MyClassB.h:

class MyClassA; // forward declaration 

class MyClassB{ 
    ... list of members and methods ... 
    MyClassA* ptrToA; 
}; 

MyClassB.cpp:

#include "MyClassB.h" 

... list of methods for MyClassB ... 

這適用於我的Windows計算機在Visual Studio中沒有問題,一直這樣做。然而,在Xcode的Mac它給我的錯誤:

Forward declaration of 'struct MyClassA' 

任何想法?這個錯誤消息似乎沒有多大意義,因爲我將class plain聲明爲day,並且返回一個有關結構的錯誤。在Xcode中不支持前向聲明(非常簡單的錯誤消息似乎表明這是問題,除了struct/class混淆之外)?我的項目被編譯爲C++,而不是C.是否有另一個項目設置我錯過了,可能導致此?

謝謝。

+1

我建議你儘量把它修剪成一個可以全部引用的例子。那麼人們就不會想知道,例如,在MyClassA聲明結束時是否真的留下了分號。 – JWWalker

回答

1

請確保您有#include "MyClassA.h" 在MyClassB.cpp,除非你不打算取消引用ptrToA,或其他需要了解的基本類型什麼。

+0

我的錯。不管怎麼說,還是要謝謝你。我只是誤解了宣言的工作方式。我試圖使用前向聲明來替代在MyClassB.h中包含MyClassA.h,希望在所有鏈接之後它將獲得它所需的東西(Objective-C以我發現的方式工作)。 如果我包含MyClassA.h,那麼我沒有理由甚至寫一個前向聲明......完整的聲明已經存在並且可以從include中獲得。 – DiggyJohn

+0

@TheoJohn你沒有向我們展示所有相關的代碼。這是一種相當常用的技術,對於提高編譯時間非常有用。 – wilhelmtell

+0

我替換了實際的類名和其他不相關的成員和方法(一羣浮點數,字符和構造函數),但是我在上面的示例代碼中放置的所有內容都是**相關代碼的100%,因爲它是架構的。 – DiggyJohn

0

什麼行代碼實際上是造成錯誤?我的期望是,您忘記了將MyClassA.h包含在MyClassB.cpp中,並且當您嘗試new對象時實際發生錯誤。

類是結構。他們只是默認標記他們的成員,而結構標記爲公開。

+0

錯誤在實際的前向聲明本身上是正確的。我還沒有寫任何代碼來「新」對象。 – DiggyJohn

+0

看起來我只是簡單地誤解了聲明如何工作。我之前使用過它們,但不是我記憶中的時尚(只是回顧一些舊代碼)。我使用它們的地方只是因爲ClassA和ClassB存在於同一個頭文件中,並且相互引用,所以需要前向聲明。 所以在目前我想要做的事情中,我確實需要在ClassB.h中包含ClassA.h ...但是,這樣做使得使用前向聲明完全沒有意義,因爲該類的完整聲明會已經存在。 – DiggyJohn

+0

不,我不認爲你有任何誤解。如果您只需要一個指向ClassA的指針,則只需要前向聲明即可。但是一旦你開始使用它,就像分配一個對象或調用成員函數一樣,你需要完整的聲明。如果這是您在ClassB.cpp中所做的,則需要在其中包含ClassA.h。 –