【问题标题】:Why is a class allowed to have a static member of itself, but not a non-static member?为什么一个类允许拥有自己的静态成员,而不是非静态成员?
【发布时间】:2012-01-21 00:03:34
【问题描述】:
class base {
public:
    base a;
};

它给出了编译错误。

class base {
public:
    static base a;
};

而这段代码没有给出编译错误

【问题讨论】:

  • 结构 a { 静态 a b; } a::b;
  • @JohannesSchaub-litb 你让我头疼了o_O
  • 狗哥,听说你喜欢上课……

标签: c++ object static-members


【解决方案1】:

因为static 类成员不存储在类实例中,这就是static 可以工作的原因。

将一个对象存储在另一个相同类型的对象中会破坏运行时 - 无限大小,对吗?

sizeof 会返回什么?对象的大小需要编译器知道,但由于它包含相同类型的对象,所以没有意义。

【讨论】:

    【解决方案2】:

    我猜错误是这样的

    字段“a”的类型不完整

    这是因为当不是静态时,类A 直到右大括号才完全定义。另一方面,静态成员变量在类完全定义后需要一个单独的定义步骤,这就是它们起作用的原因。

    搜索声明定义之间的区别以获得更详尽的解释。

    【讨论】:

    • 编译器不能为自己“设置提醒”以便稍后“添加”吗?有什么限制?
    • @AssafLevy 对象的大小是多少。 Base 包含一个Base,其中包含一个Base...
    • @JamesKanze:有点像两个互相面对的镜子……明白了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多