为什么我的类本身是一个不完整的类型?

You*_*_ba -1 c++

class test {
public:
    test(int i) : t(10) {
        cout << "cst" << i << endl;
    }

    static test ins;
    const test t;// 1
};
Run Code Online (Sandbox Code Playgroud)

在第 1 行,编译器失败并出现错误:

不允许不完整的类型

这是为什么?

Rem*_*eau 6

编译器从上到下解析代码。当编译器遇到 的声明时t,它还没有看到 声明的结尾test,因此为什么test在该位置是“不完整类型”。编译器还不知道后面是否还有更多的数据成员t,因此它不知道要保留多少空间t在 的每个实例中要保留多少空间test

基本上, a class(或struct) 不能包含非静态其自身的这样做会导致递归声明永远不会结束,直到编译器失败。

但是,class/struct可以包含指向自身的指针或引用,因为指针/引用在编译时具有固定大小。例如,这就是链表的实现方式。