兩個標頭檔案相互包含會導致超前引用的問題,所謂超前引用是指乙個型別在定義之前就被用來定義變數和宣告函式。發生這種情況是無法編譯通過的,不過可以採取一些手段解決該問題超前引用導致的錯誤有以下幾種處理辦法:
1) 使用類宣告
在超前引用乙個類之前,首先用乙個特殊的語句說明該識別符號是乙個類名,即將被超前引用。其使用方法是:
a) 用class classb;宣告即將超前引用的類名
b) 定義class classa
c) 定義class classb;
d) 編制兩個類的實現**。
上述方法適用於所有**在同乙個檔案中,一般情況下,classa和classb分別有自己的標頭檔案和cpp檔案,這種
方法需要演變成:
a) 分別定義classa和classb,並在cpp檔案中實現之
b) 在兩個標頭檔案的開頭分別用class classb;和class classa;宣告對方
c) 在兩個cpp檔案中分別包含另外乙個類的標頭檔案
note:這種方法切記不可使用類名來定義變數和函式的變數引數,只可用來定義引用或者指標。
2) 使用全域性變數
由於全域性變數可以避免超前引用,不用贅述。我的習慣是,把類物件的extern語句加在該類標頭檔案的最後,大家喜歡怎樣寫那都沒有什麼大問題,關鍵是保證不要在標頭檔案中胡亂包含。
3) 使用基類指標。
這種方法是在引用超前引用類的地方一律用基類指標。而一般情況下,兩個互相引用的類並不涉及其基類,因此不會造成超前引用。
當兩個標頭檔案互相包含的時候
當我們在寫程式的時候,由於模擬較多,會不小心出現兩個類之間出現互相包含的情況,如此一來,就出現了下面的錯誤資訊 c users administrator documents visual studio 2010 projects mpf mpf mpfdlg.h 33 error c2143 語法...
C 兩個 h需要互相包含時怎麼辦
c 要設計兩個類,乙個line類,乙個point類,而且這兩個類的宣告與定義要分開寫,而這兩類在定義時都要用到另外乙個類,所以我在line.h裡用了point.h,在point.h裡用了line.h,但是編譯通過不了。可以採用這個辦法 以line.h為例 在line.h的前面加乙個宣告 class ...
c 中兩個類互相包含引用怎麼處理
在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a class b 在這種情況下,想想能夠...