類的向前宣告

2021-06-27 05:32:29 字數 1030 閱讀 4631

//  a.h 標頭檔案

#pragma once

class a

;// b.h 標頭檔案

#pragma onceclass a;class b

;

在類 b 的宣告標頭檔案中必須前置宣告類 a,否則,編譯器報:語法錯誤,識別符號 a。

//  a.h 標頭檔案

#pragma once

class a

;// b.h 標頭檔案

#pragma once

class a;

class b

private:

a *pa; // ok

};

編譯器報錯,不知道 a 的定義。

//  a.h 標頭檔案

#pragma once

class a

;// b.h 標頭檔案

#pragma once

class a;

class b

;

編譯器報錯,不知道 a 的定義。

//  a.h 標頭檔案

#pragma once

class a

;// b.h 標頭檔案

#pragma once

class a;

class b

private:

a &refa; // ok

};

2、3的錯誤原因是一樣的。因為編譯器不知道 a 的型別資訊,所以不知道 a的具體長度,因此不能分配空間。在編譯期,編譯器必須知道 a 的大小,才能在構造 a 例項時分配具體大小的空間。注:並非只在建立例項時才必須知道b型別的大小,編譯時,也必須知道。

1 、4正確的原因是一樣的。因為宣告的 a 的指標 pa 或者宣告 a 的引用(引用是由指標來實現的),任何型別的指標或引用變數的大小都是確定的,所以編譯器可以知道其大小。

typedef 向前宣告 用typedef宣告型別

定義 可以用typedef宣告乙個新的型別名來代替已有的型別名。用法 typedef int integer 指定用識別符號integer代表int型別 typedef float real 指定用識別符號代表float型別 然後integer a real b 與語句int a float b 是...

C 類宣告 類前置宣告

參考自 關於前置型別宣告的注意點 一 class b class a class b 上述 能夠通過編譯。二 class b class a class b 上述 報錯。error list c2079 a adata uses undefined class b c2027 use of unde...

php類的宣告

回想一下學習php這麼久以來,剛開始那會一直搞不懂類 內部屬性 外部屬性現在從頭來個詳細的介紹。如下 123 4567 8910 header content type text html charset utf 8 class guests function getname function se...