class base {
public:
base a;
};
它会出现编译错误。
class base {
public:
static base a;
};
虽然此代码不会出现编译错误
答案 0 :(得分:41)
由于static
类成员未存储在类实例中,这就是static
可以工作的原因。
将对象存储在同一类型的另一个对象中会破坏运行时 - 无限大小,对吗?
sizeof
会返回什么?对象的大小需要由编译器知道,但由于它包含相同类型的对象,因此没有意义。
答案 1 :(得分:6)
我猜这个错误就像是
字段'a'的类型不完整
这是因为当不是静态时,类A
直到结束括号才完全定义。另一方面,静态成员变量在完全定义类之后需要单独的定义步骤,这就是它们工作的原因。
搜索声明和定义之间的区别,以获得更全面的解释。