c 標頭檔案相互包含問題

2021-06-22 04:56:31 字數 1300 閱讀 2417

c++中標頭檔案互相包含經常會出現編譯錯誤.

示例**如下:

a.h

#ifndef a_h

#define a_h

#include "b.h"

#includeusing namespace std;

class a

;#endif // a_h

a.cpp

#include "a.h"

a::a()

a::~a()

int a::getvala()

void a::display(b& b)

;#endif // b_h

b.cpp

#include "b.h"

b::b()

b::~b()

int b::getvalb()

void b::display(a& a)

main函式

#include #include "a.h"

#include"b.h"

using namespace std;

int main()

執行上面程式,編譯器將報錯:

b.h中 a未宣告.

若在class b中加入 a a;則會報a不是乙個型別名.

解決方法如下:

b.h中不包含a的標頭檔案,而是宣告類a. 在b.cpp中包含a的標頭檔案.

b.h

#ifndef b_h

#define b_h

#includeusing namespace std;

class a;

class b

;#endif // b_h

b.cpp

#include "b.h"

#include "a.h"

b::b()

b::~b()

int b::getvalb()

void b::display(a& a)

如此以來,就可以編譯成功了.

要注意在b.h中因為只是宣告了類a,所以是絕對不能定義a的物件的(eg a a;),因為當定義類的物件時,系統會為該物件分配相應的記憶體空間.宣告的類,不確定它的內部成員,也就無法為物件分配空間.物件定義肯定不能成功.但是可以定義引用和指標. (參見 c++primer 12.1.4類宣告與類定義).

C標頭檔案相互包含的問題

在c 中,關於cpp的標頭檔案互相包含的問題很讓人頭疼,其實我們誰也不願意弄的結構混亂,難以理解,但有時又是有必須的。假定當前有兩個標頭檔案分別為 a.h 和 b.h,內容分別如下 a.h內容為 ifndef a h define a h endif include b.h class a publ...

標頭檔案的相互包含

標頭檔案的相互包含在編譯時如果順序不注意就很容易造成編譯錯誤。遇到乙個標頭檔案,一開始並沒有包含其他標頭檔案而是定義了一些列舉,然後再包含另外乙個標頭檔案,這樣就很類似於 1 1 2 1 1 在1標頭檔案中包含2標頭檔案,預處理時就是以這樣的形式處理交給編譯器,原本的用意是在1標頭檔案的包含2之前的...

解決標頭檔案相互包含問題的方法

所謂超前引用是指乙個型別在定義之前就被用來定義變數和宣告函式。一般情況下,c c 要求所有的型別必須在使用前被定義,但是在一些特殊情況下,這種要求無法滿足,例如,在類cmyview中保留了乙個非模式對話方塊物件指標,該物件用於顯示 修改一些資訊。為了實現對話方塊 應用 按鈕,把對話方塊做的修改立刻更...