可能重复:
Why is a class allowed to have a static member of itself, but not a non-static member?
这是无效的代码
struct a{
a mem; //Invalid as the compiler does not know how much memory to allocate
};
但这是有效的:
class Date{
int d,m,y;
static Date Default_date; //Valid
};
如果没有正确定义Date数据类型,编译器如何知道这里分配了多少内存!!
这在某种意义上是否与其他静态定义不同?
答案 0 :(得分:7)
静态成员不存储在类中,因此其大小不会影响类的总大小。
您必须在其他位置定义静态成员,可能在.cpp文件中。那时编译器将必须知道类的大小。
答案 1 :(得分:5)
在第一种情况下它是无效的,因为它是一个无限大小的递归结构。 在第二种情况下,它是可以的,因为在声明之后会发生实际内存分配。
答案 2 :(得分:1)
您只能在声明类中使用数据成员,该类的大小在该点已知,即定义已存在。编译器需要知道类实例在声明时所需的内存量。您可以使用指针和对[转发 - ] 声明的类型的引用(这些类型的大小与您的操作系统相当多)。
static 成员的声明未在成员实例中分配(这是 static 的意思),所以它只有在定义时才需要知道大小。