繁体   English   中英

为什么必须在main()之外初始化静态成员?

[英]Why must the static member be initialized outside main()?

为什么这在C ++中无效?

class CLS
{
public:
    static int X;
};

int _tmain(int argc, _TCHAR* argv[])
{
    CLS::X=100;
    return 0;
}

它们可以在main中更改,就像在您的示例中一样,但您必须在全局范围内明确地为它们分配存储,如下所示:

class CLS
{
public:
        static int X;
};

int CLS::X = 100; // alocating storage, usually done in CLS.cpp file.


int main(int argc, char* argv[])
{
        CLS::X=100;
        return 0;
}

并不是静态成员必须在全局范围内是INITIALIZED,而是静态成员必须为其分配存储。

class CLS {
public:
  static int X;
};

int CLS::X;

int _tmain(int argc, _TCHAR* argv[])
{
  CLS::X=100;
  return 0;
}

一旦定义了静态数据成员,即使没有静态数据成员类的对象,它也存在。 在您的示例中,即使已定义静态数据成员CLS :: X,也不存在类X的对象。

static成员不是类对象的一部分,但它们仍然是类范围的一部分。 它们必须在类之外独立初始化,就像使用类作用域解析运算符定义成员函数一样。

int CLS::X=100;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM