c typedef 無法前置宣告

2021-08-27 02:01:14 字數 296 閱讀 3259

為了減少c++檔案的編譯依賴,前置宣告經常使用,特別是在標頭檔案中,如果不是必要,對於class基本都使用前置宣告,而不是直接#include。

今天遇到乙個問題,需要在某類的標頭檔案裡面引用到另外乙個「類」,因此自然使用了前置宣告,但是居然編譯不過,顯示定義衝突。

查了一下,原來被引用的「類」其實不是乙個類,而是乙個struct的typedef,非常老套的c寫法:

typedef struct _foo

}foo;

查了一下,對於typedef根本沒有辦法前置宣告。無論是class還是struct都不行。

前置宣告(Forward declaration)

前置宣告是指宣告乙個類或結構體而不定義它,比如 class a struct b 在宣告之後,定義之前,該類或結構體被稱為不完全型別 incompletion type 意思是,知道型別a和b,但不知道他包含哪些內容 不完全型別的使用有一些限制,不如不能用它來定義物件,但可以定義指象該型別物件的指標...

C 前置宣告

特點 被宣告的類不用重新編譯,節省編譯時間 比如a包含乙個指向b的指標,b包含a的乙個例項,這種情況下,使用前置宣告。易錯的點 class date class task1 因為分配器為d分配記憶體的時候,必須要知道 d的大小 主要應用場景是兩個標頭檔案相互包含的場景,建議僅將前置宣告用於解決迴圈引...

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...