在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類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 在這種情況下,想想能夠...