簡化問題為:我們現在有a,b兩個類的標頭檔案,具體有a.h,a.cpp,b.h,b.cpp個資料夾。假如在a類中我們需要使用b類,在b類中需要使用a類,常規操作就是相互引用各自的標頭檔案。但是這樣會造成迴圈依賴的情況,就會報錯。
1.前向宣告解決互相引用造成迴圈依賴
#pragma once
#include
"b.h"
classa;
#pragma once
//前向宣告取代互相引用標頭檔案
classa;
class
b;
注意:只能用於定義指標、引用、以及用於函式形參的指標和引用。而不能定義物件(因為此時編譯器只知道這是個類,還不知道這個類的大小有多大),也不能訪問類的物件,任何形式的訪問都不允許。
2.使用前向宣告取代引用的這個類,在以下情況會報錯:
#pragma once
#include
"b.h"
classa;
#pragma once
classa;
classb;
#include
"b.h"
//#include "a.h」 反注釋解決找不到a定義的報錯
b::b
(void);
b::~b(
void);
void b::
bcalla
(a* a)
原因也比較簡單,是因為b類由於前向宣告沒有#include 「a.h」,導致找不到a類的定義,解決方案就是在b.cpp中#include "a.h"一下即可。 C 標頭檔案相互引用
常見錯誤用法 a.h ifndef header aaa define header aaa include b.h class a endif a.cpp include a.h a a void a a void b.h ifndef header bbb define header bbb i...
C 標頭檔案重複包含的解決方案
一 pragma once 比較常用 這是乙個比較常用的指令,只要在標頭檔案的最開始加入這條指令就能夠保證標頭檔案被編譯一次 pragma once用來防止某個標頭檔案被多次include,ifndef,define,endif用來防止某個巨集被多次定義。pragma once是編譯相關,就是說這個...
解決C 引用標頭檔案問題
main.c 中需要引用標頭檔案 func1.h 處於同一資料夾下 include func1.h 直接引用 main.c 中需要引用標頭檔案func2.h fun2.h處於main的平行子資料夾下 include func2 func2.h 資料夾func2後再引用 mian.c 中需要引用標頭檔...