C++兩個類相互包含引用的問題


  • 在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的類型,B中也使用了A定義的類型
  1. class A
  2. {
  3. B b;
  4. }
  5. class B
  6. {
  7. A* a;
  8. }
  • 請注意上面的定義內容,一般情況下是不能出現類A,類B相互引用都定義對象,即如下的樣子:
  1. class A
  2. {
  3. B b;
  4. }
  5. class B
  6. {
  7. A a;
  8. }
  • 編譯器在聲明A的時候,由於B的聲明在A的下面所以出現編譯錯誤
  • 那么,在定義時因為相互引用肯定會需要相互包含頭文件,如果僅僅只是在各自的頭文件中包含對方的頭文件,是通不過編譯的,如下:
  1. //class A.h
  2. #include"B.h"
  3. class A
  4. {
  5. B b;
  6. }
  7. //class B.h
  8. #include"A.h"
  9. class B
  10. {
  11. A *a;
  12. }
如上的包含方式可能會造成編譯器有錯誤提示:A.h文件中使用了示知類型B。
怎么辦?
一般的做法是:兩個類的頭文件之中,選一個包含另一個類的頭文件,但另一個頭文件中只能采用class *;的申明形式,而在實現文件中(*.cpp)中包含頭文件,如下:
  1. //class A.h
  2. #include"B.h"
  3. class A
  4. {
  5. B b;
  6. }
  7. //class B.h
  8. class A;
  9. class B
  10. {
  11. A *a;
  12. }
  13. //B.cpp
  14. //在B.cpp中的文件包含處要有下面語句,否則不能調用成員a的任何內容
  15. #include"A.h"
  16. B::B()
  17. {
  18. ……
  19. }
而且,在B.h中,由於是采用的class A;進行聲明的方式,所以在class B的聲明中只能定義A的指針或引用。
 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM