1. 程式人生 > 其它 >(c++)兩個類相互包含引用的問題

(c++)兩個類相互包含引用的問題

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的型別,B中也使用了A定義的型別
class A
{
int i;
B b;
}

class B
{
int i;
A* a;
}

請注意上面的定義內容,一般情況下是不能出現類A,類B相互引用都定義物件,即如下的樣子:
class A
{
int i;
B b;
}

class B
{
int i;
A a;
}
在這種情況下,想想 可以有a.b.a.b.a.b.a.b.a.b…………,很有點子子孫孫無窮盡之狀,那麼我的機器也無法承受。最主要的還是這種關係很難存在,也很難管 理。這種定義方式類同程式中的死迴圈。所以,一般來說,兩者的定義,至少有一方是使用指標,或者兩者都使用指標,但是決不能兩者都定義實體物件。

言歸正傳,那麼,在定義時因為相互引用肯定會需要相互包含標頭檔案,如果僅僅只是在各自的標頭檔案中包含對方的標頭檔案,是通不過編譯的,如下:
//class A.h
#include "B.h"
class A
{
int i;
B b;
}

//class B.h
#include "A.h"
class B
{
int i;
A *a;
}

如上的包含方式可能會造成編譯器有錯誤提示:A.h檔案中使用了示知型別B。
怎麼辦?
一般的做法是:兩個類的標頭檔案之中,選一個包含另一個類的標頭檔案,但另一個頭檔案中只能採用class *;的申明形式,而在實現檔案中(*.cpp)中包含標頭檔案,如下:
//class A.h
#include "B.h"
class A
{
int i;
B b;
}

//class B.h
class A;
class B
{
int i;
A *a;
}

//B.cpp
//在B.cpp中的檔案包含處要有下面語句,否則不能呼叫成員a的任何內容
#include "A.h"
B::B()
{
……
}
————————————————
版權宣告:本文為CSDN博主「shuttlecock」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/czx32296429/article/details/6246841