2010-12-22 182 views

回答

0

一旦定義了一個靜態數據成員,它的存在,即使不存在靜態數據成員的類的對象。在你的例子中,即使已經定義了靜態數據成員CLS :: X,也不存在類X的對象。

+0

似乎這不回答我的問題... – yoyo 2010-12-22 05:44:46

0

static成員不是類對象的一部分,但它們仍然是類作用域的一部分。它們必須在類的外部獨立初始化,就像使用類作用域解析運算符定義成員函數一樣。

int CLS::X=100; 
5

他們可以在裏面你的例子來改變主一樣,但你必須在全球範圍內爲他們明確地分配存儲空間,喜歡這裏:

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

5

這不是靜態成員必須在全局範圍內初始化,而是靜態成員必須爲其分配存儲空間。

class CLS { 
public: 
    static int X; 
}; 

int CLS::X; 

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