C 中兩個類互相引用

2021-07-02 04:07:55 字數 1440 閱讀 2501

一、問題描述

現在有兩個類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 此時編譯就會...