C 前置宣告

2021-09-01 23:45:42 字數 1012 閱讀 5149

特點:被宣告的類不用重新編譯,節省編譯時間

比如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改為指標,因為對於特定的平台指標大小事固定的。如下是編譯四個階段的過錯。其中編譯階段不會...