oc 關於標頭檔案宣告 與前向宣告

2021-07-04 13:43:49 字數 888 閱讀 2100

參照

1.#import和#include的區別

(當我們在**中使用兩次#include的時候會報錯:因為#include相當於拷貝標頭檔案中的宣告內容,所以會報重複定義的錯誤

但是使用兩次#import的話,不會報錯,他會做一次判斷,如果已經匯入一次就不匯入了)

#import本身有防止標頭檔案被重複包含的功能,而#include需要借助於標頭檔案預處理來防止被重複包含

兩種都是把頭檔案中的宣告內容拷貝進當前檔案中

2.關於前向宣告問題

有乙個課程類classes和學生類student,他們兩之間需要

相互引用(匯入)

(student.h中匯入class。h,class。h中匯入student。h)

問題是oc中類的相互引用的問題,我們在student.h檔案中匯入了classes.h,又在classes.h檔案中匯入了student.h,oc中在相互匯入的時候編譯是不通過的

會提示找不到指定型別

解決方法

將#import "student.h"**注釋了,使用

@class student

這段**的作用就是不會將student.h檔案拷貝過來,只是告訴編譯器student這個類在別的地方中有定義,這樣就不知道這個類中的任何資訊了(哪些屬性和方法)

總結:

這一篇文章就介紹了#import關鍵字和@class的作用,特別是@class關鍵字的使用,為了解決相互匯入的問題,在此回顧一下我們是怎麼操作的:

student類中的匯入classes.h方式不變,在classes.h標頭檔案中使用@class關鍵字引入student型別,使其編譯通過,然後在classes.m檔案中匯入student.h檔案,使其執行通過

oc 關於標頭檔案宣告 與前向宣告

參照 1.import和 include的區別 當我們在 中使用兩次 include的時候會報錯 因為 include相當於拷貝標頭檔案中的宣告內容,所以會報重複定義的錯誤 但是使用兩次 import的話,不會報錯,他會做一次判斷,如果已經匯入一次就不匯入了 import本身有防止標頭檔案被重複包含...

關於類的前向宣告

前向宣告的定義 有些時候我們可以宣告一些類但是並不去定義它,當然這個類的作用也很有限了。比如class foo 宣告乙個foo類,這個宣告,有時候也叫做前向宣告 forward declaration 在宣告完這個foo類之後,定義完這個foo類之前的時期,foo類是乙個不完全的型別 incompl...

類前向宣告

class a a void del a ptr int main 正常執行,delete p 先執行類析構函式,通知系統這塊記憶體上的資料已經無效無需維護了,然後使用operator delete 釋放這塊記憶體 class a void del a ptr class a a int main ...