首先,兩個.m
檔案互相引用.h
檔案,不會出現問題的。但是比如在.h
裡的某個屬性,型別是自定義的類,這時候如果只在.m
裡引用就編不過了。
這時候就要用@class
。舉個例子:
@inte***ce
foo : nsobject
@property(nonatomic, strong) bar* somebar;
@end
就會報錯,說「沒有bar
這個類」之類
@class
bar;
@inte***ce
foo : nsobject
@property(nonatomic, strong) bar* somebar;
@end
然後在.m
裡引用bar.h
,就不會報錯了。
@class bar;
這句話的意思就是,告訴編譯器,確實有bar
這個類,具體細節你不用管,別報錯就行了。所以顯然,到了.m
裡,它只知道有這個類,卻不知道這個類有什麼屬性,有哪些方法。所以需要在.m
再 import 這個標頭檔案。
所以我們推薦盡量在.m
裡引用標頭檔案,而不是在.h
裡,必要時使用@class
。
但是也有一些情況,是不可避免要在.h
裡引用的。比如:繼承某個類,必須在.h
裡 import 父類的.h
;類實現某個介面,必須在.h
裡引用介面的.h
等等。
C 標頭檔案相互引用
常見錯誤用法 a.h ifndef header aaa define header aaa include b.h class a endif a.cpp include a.h a a void a a void b.h ifndef header bbb define header bbb i...
兩頭檔案相互包含,且內容相互引用問題
ifndef head 1 h define head 1 h 防止多次包含,重複定義 include head2.h define var macro 1 define a macro,which used in head2.h bool func classa ca classa is defi...
解決標頭檔案相互包含問題的方法 超前引用
所謂超前引用是指乙個型別在定義之前就被用來定義變數和宣告函式。一般情況下,c c 要求所有的型別必須在使用前被定義,但是在一些特殊情況下,這種要求無法滿足,例如,在類cmyview中保留了乙個非模式對話方塊物件指標,該物件用於顯示 修改一些資訊。為了實現對話方塊 應用 按鈕,把對話方塊做的修改立刻更...