2014-03-01 130 views
1

爲什麼這段代碼給了我一個錯誤,指向student :: count的未定義引用。我使用靜態計數,我知道靜態成員默認爲0,但不知道爲什麼給我一個錯誤。請解釋我。class C++中的靜態成員undefined reference

#include <iostream> 
using namespace std; 

class Student{ 

static int count; 
string name; 


public: 

    Student(){ 
     count++; 
     cout<<"I am student"<<count<<endl; 

    } 
    int getCount() const 
    { 

     return count; 
    } 

    void setCount(int x){ 
     count=x; 

    } 


}; 

int main(){ 

Student stud[20]; 


return 0; 
} 
+2

你忘了做'INT學生::計數;' – 0x499602D2

+0

「給我一個錯誤」有許多種錯誤的。你越具體,更快速的otherx可以幫助你。 –

+0

請同時告訴我關於靜態常量?我只是想明白, – user3215228

回答

1

你有沒有定義Student::count,違反one definition rule。在一個翻譯單元中定義一個定義。

請注意,如果static int count;的定義,靜態成員將幾乎不可能使用。每次包含頭文件時都會定義一個定義,使得一個定義規則幾乎不可能遵守。

0

在你的頭文件中寫入static int count;意味着:編譯器,在某個地方你會發現一個變量作用於這個類,它將是一個int並且將是nammed count

現在,您需要在某處實際實例化(定義)您的變量。也許在你的情況下,將int Student::count;添加到你的主文件將沒問題。