C 中兩個類相互include的問題

2021-09-08 10:33:39 字數 1744 閱讀 5119

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

例如:cup.h

#ifndef cup_h

#define cup_h#include

"box.h

"class

cup;

#endif

//cup_h

cup.cpp

#include "

cup.h

"#include

using

namespace

std;

cup::cup()

cup::~cup()

box.h

#ifndef box_h

#define box_h#include

"cup.h

"class

box;

#endif

//box_h

box.cpp

#include "

box.h

"#include

using

namespace

std;

box::box()

box::~box()

在這種情況下,想想可以有b.cup.b.cup.b.....…………,這種定義方式類同程式中的死迴圈。編譯器肯定會報錯的。

我的報錯資訊是

include\cup.h|10|error: 'box' does not name a type|

所以,一般來說,兩者的定義,至少有一方是使用指標,或者兩者都使用指標,但是決不能兩者都定義實體物件。

言歸正傳,那麼,在定義時因為相互引用肯定會需要相互包含標頭檔案,如果僅僅只是在各自的標頭檔案中包含對方的標頭檔案,是通不過編譯的,如上面的情況所示

解決的辦法,讓其中乙個(例如cup)只宣告對方(class box;)並且使用指標(box *b),並且不包含標頭檔案box.h,在實現檔案(cup.cpp)檔案中再包含box.h,修改後的**如下:

cup.h

#ifndef cup_h

#define cup_h

class

box;

class

cup;

#endif

//cup_h

cup.cpp

#include "

cup.h

"#include

#include

"box.h

"using

namespace

std;

cup::cup(): b(null)

cup::~cup()

void

cup::createbox()

注意為什麼不在cup::cup()中直接b = new box(),因為這是死迴圈,直接stackoverflow,所以使用了createbox()

最後再寫乙個main.cpp來測試,可以去嘗試解釋一下執行結果

#include "

box.h

"#include

"cup.h

"#include

using

namespace

std;

intmain()

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

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a int i b b class b int i a a 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a...

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

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a class b 在這種情況下,想想可以...

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

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a class b 在這種情況下,想想能夠...