[英]Why is it allowed to have a class that has an incomplete type static member of itself?
[英]Why is my class an incomplete type inside itself?
class test {
public:
test(int i) : t(10) {
cout << "cst" << i << endl;
}
static test ins;
const test t;// 1
};
在第 1 行,編譯器失敗並出現錯誤:
不允許不完整的類型
這是為什么?
編譯器從上到下解析代碼。 當編譯器遇到t
的聲明時,它還沒有看到test
聲明的結尾,因此為什么test
在該位置是“不完整類型”。 編譯器還不知道t
之后是否還有更多數據成員,因此它不知道在每個test
實例中為t
保留多少空間。
基本上,一個class
(或struct
)不能包含其自身的非靜態實例。 這樣做會導致遞歸聲明,直到編譯器失敗才結束。
但是, class
/ struct
可以包含指向自身的指針或引用,因為指針/引用在編譯時具有固定大小。 例如,這就是鏈表的實現方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.