我寫了一個類變量,如下所示:C++靜態函數和
#include<iostream>
using namespace std;
class A
{
static int cnt;
static void inc()
{
cnt++;
}
int a;
public:
A(){ inc(); }
};
int main()
{
A d;
return 0;
}
我想通過構造函數調用的函數INC,但是當我編譯我得到一個錯誤:
/tmp/ccWR1moH.o: In function `A::inc()':
s.cpp:(.text._ZN1A3incEv[A::inc()]+0x6): undefined reference to `A::cnt'
s.cpp:(.text._ZN1A3incEv[A::inc()]+0xf): undefined reference to `A::cnt'
我無法理解的錯誤... plz幫助......沒有定義
爲什麼會這樣?如果我們只在課堂內聲明它,這還不夠嗎? – nitish712
您也可能會考慮初始化該值。不知道編譯器是否會分配一個默認值。我總是賭「不」,只是爲了確保。 –
@ nitish712如果該類是在頭中定義的,則它可能以多個翻譯單元(源文件)結尾。編譯器必須任意選擇一個來保存定義。它不是隨意選擇一個,而是迫使你做出選擇。 (從技術上講,它甚至可能無法做出選擇,因爲傳統上編譯器一次只能看到一個源文件。) –