簡體   English   中英

為什么我的班級本身就是一個不完整的類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM