此文轉載自:
C++中兩個類的頭文件互相包含問題 - CSDN博客 http://blog.csdn.net/a812073479/article/details/38542515
我們知道,當一個類(設類A)中包含另一個類(設類B)的對象時,必須在該文件中包含另一個類的頭文件,如果兩個類都互用到了對方的對象,理論上就要互相包含頭文件,但是這樣是不可取的。貼出代碼如下:
這樣是無法通過編譯的,其原因是它們的頭文件互相包含了,你包含我,我又包含你,沒完沒了!
為了解決這個問題,只需要去掉一個或則都去掉包含的頭文件語句即可,為了要去掉包含的頭文件
語句,就不能在類中定義另外一個類的對象,而我們卻是要在該類中使用另外一個類的對象,那么
就可以利用對象的指針,而用對象的指針卻可以不用包含頭文件,做簡單的聲明即可。這樣就打破
了你包含我,我包含你的情況。(當然也可以利用全局對象、類的繼承來解決!)
根據情況,可以分為是否使用類的對象:(這里使用類的對象是指將對象當作類的成員)
1、如果在A類中使用了B類的對象,那么就必須包含B類的頭文件,而B類中就不能使用A類的對象了,
這時就可以用對象的指針,用對象的指針,可以作簡單的聲明即可代替頭文件的包含。此類情況的
代碼如下:
最后應該注意,B類中使用的是指針,所以使用前必須先初始化,讓其指向一個存在的對象;
另外,為了通過指針使用A類的成員函數,那么就在B類的源文件中加上包含A類的頭文件語句。
2、兩個類中互相使用了對方的指針,這樣的情況很簡單,分別在各自的頭文件中聲明一下使用的類,
而在各自的源文件中包含對方的頭文件即可。(也可以根據情況1來解決)
這樣就有效解決了頭文件互相包含的問題。