特點:被宣告的類不用重新編譯,節省編譯時間
比如a包含乙個指向b的指標,b包含a的乙個例項,這種情況下,使用前置宣告。
易錯的點
class date;
class task1 ;
因為分配器為d分配記憶體的時候,必須要知道 d的大小
主要應用場景是兩個標頭檔案相互包含的場景,建議僅將前置宣告用於解決迴圈引用問題。
(標頭檔案並不參加鏈結和編譯。編譯器第一步要做的就是簡單的把頭檔案在包含它的原始檔中展開。不知你是否能理解這句話。也就是標頭檔案裡面有什麼內容,通通把它移到包含這個標頭檔案的原始檔裡,當無法展開標頭檔案,就會出現問題)
下面是示例demo
1、
// 圖層類
#pragma once
#include //#include "symbol.h"
class csymbol;
class clayer
;
2、
#include"layer.h"
#include "symbol.h"
clayer::clayer(void)
clayer::~clayer(void)
void clayer::createnewsymbol()
3、
// symbol.h
// 符號類
#pragma once
#include "layer.h"
class csymbol
;
4、
#include "symbol.h "
csymbol::csymbol(void)
csymbol::~csymbol(void)
概念參考: C 前置宣告
一般的前置函式宣告 見過最多的前置函式宣告,基本格式 如下 1 include 2 using namespace std 34 void fun char ch,int pvalue,double dvalue 56 void main 714 15void fun char ch,int pva...
C 前置宣告
問題 最近遇到了兩個類a b相互呼叫的情況,於是想當然的在兩個類a和b的標頭檔案中 include 了所需的標頭檔案,當然結果編譯報錯了。為什麼呢,a需要b,b需要a,形成了迴圈,違反了程式的確定性原則。如下圖所示 如這樣相互包含的問題,可以使用前置宣告來解決。即 在標頭檔案中宣告該類,在實現檔案中...
C 編譯,前置宣告
class a class b 存在類巢狀的問題,編譯無法通過。採用前置宣告解決 class b class a class b 以上 還是錯誤的,因為在編譯期間對於類的定義需要知道其成員變數型別的大小。將a.b改為指標,因為對於特定的平台指標大小事固定的。如下是編譯四個階段的過錯。其中編譯階段不會...