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

问题描述:

为什么在C++中这是无效的?为什么静态成员必须在main()之外初始化?

class CLS 
{ 
public: 
    static int X; 
}; 

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

什么是c + _ +?你是否经常将unde_rscore插入到w_ords中,因为没有reas_on? – jalf 2010-12-22 08:55:09

一旦定义了一个静态数据成员,它的存在,即使不存在静态数据成员的类的对象。在你的例子中,即使已经定义了静态数据成员CLS :: X,也不存在类X的对象。

+0

似乎这不回答我的问题... – yoyo 2010-12-22 05:44:46

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

int CLS::X=100; 

他们可以在里面你的例子来改变主一样,但你必须在全球范围内为他们明确地分配存储空间,喜欢这里:

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; 
} 
+0

+1。这是真正的问题。在原始示例中,您从未实际分配静态成员的存储空间。 – 2010-12-22 06:14:50

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

class CLS { 
public: 
    static int X; 
}; 

int CLS::X; 

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