2012-08-10 80 views
5

可能重複:
Defining static members in C++爲什麼我不能用C初始化靜態字段++

我對C++的工作點點,我不知道如何在C使用靜態字段++ ,他們似乎沒用。請糾正我。

我不能做到這一點:

class AClass{ 
    public: 
     static int static_field = 0; 
}; 

,並且無法正常工作或

class AClass{ 
    public: 
     static int static_field; 
}; 

int main(){ 
    int AClass::static_field = 0; 
    return 0; 
} 
+0

'@ w00te'和其他人已經回答了這個問題。我認爲你的困惑是由於C++ *聲明*和*定義*是兩個不同的事實。一個使符號可見,另一個分配存儲空間。搜索「C++聲明vs定義」或類似內容。 – David 2012-08-10 16:01:28

+0

Hrm?我的答案有最長的計時器,我不記得在任何地方使用單詞定義。來自MSFT:「聲明:是沒有以下定義的類名稱聲明,如類T ;.」那就是他在第二個代碼示例中的含義。 – 2012-08-10 16:41:03

回答

9

您必須在主函數範圍外初始化static_field。

int AClass::static_field = 0; 
int main(){ 
} 
14

其實,你很接近。

您應該移動:int AClass::static_field = 0;以外的main()所以這是一個CPP文件中全局,最好AClass.cpp.

這樣一來,你在你的頭聲明,並在源文件中對其進行初始化。您可以在main()或其他任何地方使用它,只需在完成聲明/初始化設置後執行AClass::static_field即可。

PS:它們絕對不是無用的。

這是一個很好的用例...假設你有內存泄漏,你需要跟蹤它們。你在你的課堂中放置了一個靜態計數器,因此該類的所有實例都會共享它。然後,您可以使任何構造函數/析構函數遞增或遞減該計數器。因此,您可以打印計數器以顯示一個班級有多少個實例可以幫助您找到泄漏點。

4

試試這個:

class AClass{ 
    public: 
     static int static_field; 
}; 

int AClass::static_field = 0; 

int main(){ 
    return 0; 
} 
4

當你在這裏聲明一個靜態變量就表示有將是這個變量的類的所有實例共享的一個實例。

將聲明移到主函數之外,就像提供的一些其他答案是正確的解決方案。

下面是從MSDN上static關鍵字一些文檔:

http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx

希望這有助於

相關問題