class person;
void show1(person &k)
{ cout上述**在友元函式的類外實現中使用了該類,則需在之前宣告,上述**已做宣告。
但是上述**依然會報錯,因為類的提前宣告,編譯器只是知道了person這是乙個類,該類的具體細節(例如成員變數)編譯器並不知道,所以此時person又叫做不完全型別(直到該類具體定義完之前,person都是不完全型別),所以直接用k.age直接引用類的成員變數會報錯。
在類的提前宣告和具體實現之間若要使用該類(不完全型別),只能使用類(不完全型別)的引用或類(不完全型別)指標(因為這兩者不用關心類的具體細節)或者作為函式宣告的返回值型別和引數型別;不能使用不完全型別定義變數或例項化物件(編譯器不知道為其預留多大的記憶體空間):
在結構體型別定義中和類成員定義中同樣不能定義該型別的變數和物件,因為此時該型別還沒有定義完,也是不完全型別。但是有一點除外:在類成員函式類內實現中可以可以把該類作為乙個完整型別看待,即在函式體中可以用該類例項化物件。
類前向宣告
class a a void del a ptr int main 正常執行,delete p 先執行類析構函式,通知系統這塊記憶體上的資料已經無效無需維護了,然後使用operator delete 釋放這塊記憶體 class a void del a ptr class a a int main ...
類的前向宣告
在我們看一些c 標頭檔案的時候,經常可以看到某些類的宣告但卻找不到定義。如 class abc 僅僅宣告,沒有定義 通常後面還會有定義指向這個型別的指標或引用,如 abc pointer abc pointer 這種形式稱之為類的前向宣告 引用。在宣告之後,定義之前,類abc是乙個不完全型別 inc...
C 類前向宣告
在乙個群內看到的訊息,關於類的前向宣告 宣告乙個foo類,這個宣告,有時候也叫做前向宣告 forward declaration 在宣告完這個foo類之後,定義完這個foo類之前的時期,foo類是乙個不完全的型別 incomplete type 也就是說foo類是乙個型別,但是這個型別的一些性質 比...