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

时间:2010-12-22 05:31:15

标签: c++ static-members

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

class CLS
{
public:
    static int X;
};

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

4 个答案:

答案 0 :(得分:5)

可以在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;
}

答案 1 :(得分:5)

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

class CLS {
public:
  static int X;
};

int CLS::X;

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

int CLS::X=100;