兩個類的標頭檔案互相包含

2021-10-05 16:13:25 字數 1418 閱讀 3229

我做任務的時候遇到了兩個類都互相包含對方的物件的問題,本來是有錯誤的,但經過我一番改動,兩個標頭檔案互相包含同時,每個標頭檔案都含有令乙個類的前置宣告。雖然最後執行正確,但是方法不太正確,我寫的程式打包放在了碼雲我的私密倉庫裡,在網上看到了比較正確的方法記錄下來。

我們知道,當乙個類(設類a)中包含另乙個類(設類b)的物件時,必須在該檔案中包含另乙個類的標頭檔案,如果兩個類都互用到了對方的物件,理論上就要互相包含標頭檔案,但是這樣是不可取的。貼出**如下:

//檔案a.h中的** 

2. #pragma once

3. #include "b.h"

4.classa5.

;9.10.//檔案b.h中的**

11. #pragma once

12. #include "a.h"

13.class

b14.

;

這樣是無法通過編譯的,其原因是它們的標頭檔案互相包含了,你包含我,我又包含你,沒完沒了!

為了解決這個問題,只需要去掉乙個或則都去掉包含的標頭檔案語句即可,為了要去掉包含的標頭檔案

語句,就不能在類中定義另外乙個類的物件,而我們卻是要在該類中使用另外乙個類的物件,那麼

就可以利用物件的指標,而用物件的指標卻可以不用包含標頭檔案,做簡單的宣告即可。這樣就打破

了你包含我,我包含你的情況。(當然也可以利用全域性物件、類的繼承來解決!)

根據情況,可以分為是否使用類的物件:(這裡使用類的物件是指將物件當作類的成員)

如果在a類中使用了b類的物件,那麼就必須包含b類的標頭檔案,而b類中就不能使用a類的物件了,這時就可以用物件的指標,用物件的指標,可以作簡單的宣告即可代替標頭檔案的包含。

此類情況的**如下:

"code"

class

="cpp"

>

//檔案a.h中的**

02. #pragma once

03. #include "b.h"

//使用了b類的物件,所以要包含標頭檔案

04.05.

06.class

a07.

;11.

12.//檔案b.h中的**

13. #pragma once

14.15.

classa;

//使用了a類物件的指標,只做簡單的宣告即可

16.17.

class

b18.

;

最後應該注意,b類中使用的是指標,所以使用前必須先初始化,讓其指向乙個存在的物件;

另外,為了通過指標使用a類的成員函式,那麼就在b類的原始檔中加上包含a類的標頭檔案語句。

兩個類中互相使用了對方的指標,這樣的情況很簡單,分別在各自的標頭檔案中宣告一下使用的類,而在各自的原始檔中包含對方的標頭檔案即可。(也可以根據情況1來解決)

兩個類標頭檔案互相包含

c 中兩個類的標頭檔案互相包含問題 csdn部落格 我們知道,當乙個類 設類a 中包含另乙個類 設類b 的物件時,必須在該檔案中包含另乙個類的標頭檔案,如果兩個類都互用到了對方的物件,理論上就要互相包含標頭檔案,但是這樣是不可取的。貼出 如下 這樣是無法通過編譯的,其原因是它們的標頭檔案互相包含了,...

C 中兩個類的標頭檔案互相包含問題

我們知道,當乙個類 設類a 中包含另乙個類 設類b 的物件時,必須在該檔案中包含另乙個類的標頭檔案,如果兩個類都互用到了對方的物件,理論上就要互相包含標頭檔案,但是這樣是不可取的。貼出 如下 檔案a.h中的 02.pragma once 03.include b.h 04.class a 05.09...

兩個類互相包含的問題

今天在寫自己專案時碰到兩個類互相包含的問題,查詢了下網上的資料,整理如下 在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義...