2010-08-25 71 views
1

這是我第一次使用Objective-C,並且一直試圖創建我在其他類的方法中創建的類的對象,並且它不起作用。我的意思是比如,我將有一個主類和方法之一確實是這樣的:爲什麼我總是收到「因此未聲明」的錯誤消息?

exampleclass *instance1 = [[exampleclass alloc] init] 

·又是ExampleClass中未申報。 exampleclass在另一個文件中,我的主類不能聯繫它,或者至少我認爲正在發生這種情況。爲什麼不能找到exampleclass並創建它的一個實例?

回答

4

您是否在您嘗試使用它的源文件中導入了此類的頭文件?添加如下內容:

#import "exampleclass.h" 

與文件頂部的其他標題導入。這是假設你在課後給你的文件命名。

+0

非常感謝!我正在把頭髮拉出來。 – Regan 2010-08-25 04:00:57

1

編譯C或Objective-C源文件時,每個.c.m文件都是獨立解釋的,不知道其他源文件。頭文件用來描述在其他源文件中可以找到的東西(它們聲明事物存在,但不包含定義),所以如果你的一個源文件想要使用另一個源文件中的東西,你需要確保編譯器知道它,並通過包含描述/聲明它的頭來完成。

如果您有一個名爲exampleclass.h的頭文件,並且此頭文件包含聲明exampleclass,那麼您需要導入此頭文件以告訴編譯器該類存在,否則它會抱怨它未聲明。

#import "exampleclass.h" 
// now compiler is aware of exampleclass. 
... 
... 
0

如果你正在使用的協議,即像你可能會落入這個陷阱......

MyClass* myInstanceOfThatClass = [anotherObject methodX]; 

而如果MyClass的是一個協議,你可以鍵入

id<MyClass>* myInstanceOfThatClass = [anotherObject methodX]; 

我對於來自Java背景的Objective-C來說,我一直試圖做強類型的東西,而不是鴨子打字,所以我認爲隨着時間的推移我會看到很多這些問題;-)

Rob。

相關問題