一、問題描述
現在有兩個類a和b需要定義,定義a的時候需要用到b,定義b的時候需要用到a。
二、分析
a和b的定義和呼叫都放在乙個檔案中肯定是不可以的,這樣就會造成兩個迴圈呼叫的死迴圈。
根本原因是:定義a的時候,a的裡面有b,所以就需要去檢視b的佔空間大小,但是檢視的時候又發現需要知道a的佔空間大小,造成死迴圈。
解決方法:
(1)寫兩個標頭檔案a.h和b.h分別用於宣告類a和b;
(2)寫兩個.cpp檔案分別用於定義類a和b;
(3)在a的標頭檔案中匯入b的標頭檔案;
(4)在b的標頭檔案中不匯入a的標頭檔案,但是用extern 的方式宣告類a,並且,在b中使用a的時候要用指標的形式。
原理:在b中用指標呼叫a,那麼在a需要知道b佔空間大小的時候,就會去找到b的定義檔案,雖然b的定義檔案中並沒有匯入a的標頭檔案,不知道a的佔空間大小,但是由於在b中呼叫a的時候用的指標形式,b只知道指標佔4個位元組就可以,不需要知道a真正佔空間大小,也就是說,a也是知道b的佔空間大小的。
三、c++示例a的標頭檔案a.h:
#ifndef _a
#define _a
#include "b.h"//a的標頭檔案匯入了b的標頭檔案
//extern class b;
class a;
#endif _a
b的標頭檔案b.h:
#ifndef _b
#define _b
//#include "a.h"//b的標頭檔案沒有匯入a的標頭檔案,需要有三個地方需要注意!
extern class a;//注意1:需要用extern宣告a
class b;
#endif _b
a的定義檔案a.cpp:
#include #include "a.h"
using namespace std;
a::a()
int a::geta()
void a::handle()
int b::getb()
void b::handle()
四、注意
下面情況編譯不能通過:
a.h中包含b.h且b.h中包含a.h
c 中兩個類互相引用的問題
最近在改乙個c 程式的時候碰到一條警告資訊,警告資訊為 刪除指向不完整 q2dtorusnode 型別的指標 沒有呼叫析構函式 1 c users lxw desktop dragonfly第二階段實驗 最終的實驗版本 實驗目錄 dragonfly modify src q2dtorus.h 6 參...
c 中兩個類互相引用的問題
最近在改乙個c 程式的時候碰到一條警告資訊,警告資訊為 刪除指向不完整 q2dtorusnode 型別的指標 沒有呼叫析構函式 1 c users lxw desktop dragonfly第二階段實驗 最終的實驗版本 實驗目錄 dragonfly modify src q2dtorus.h 6 參...
c 兩個類互相引用的問題
現在有兩個類要相互應用時,會出現各種各樣的問題,首先看第乙個例子 ifndef ah define ah class b class a a endif標頭檔案a.h包含class a如上 ifndef bh define bh class b endif標頭檔案b.h包含classb 此時編譯就會...