2012-02-02 42 views
32

我正在使用交叉編譯器。我的代碼是:對靜態成員的未定義引用

class WindowsTimer{ 
public: 
    WindowsTimer(){ 
    _frequency.QuadPart = 0ull; 
    } 
private: 
    static LARGE_INTEGER _frequency; 
}; 

我得到以下錯誤:

undefined reference to `WindowsTimer::_frequency'

我也試圖將其更改爲

LARGE_INTEGER _frequency.QuadPart = 0ull; 

static LARGE_INTEGER _frequency.QuadPart = 0ull; 

,但我仍然有錯誤。

有人知道爲什麼嗎?

+0

可能重複的[未定義的靜態成員,鏈接器錯誤引用](http://stackoverflow.com/questions/9074073/undefined-reference-to-baseobject-linker-error-cw-freeglut) – iammilind 2012-02-02 10:15:22

+0

哪裏(如果任何地方)你有_defined_'WindowsTimer :: _頻率嗎? – 2012-02-02 10:16:03

+0

@CharlesBailey它是我在班上唯一的成員。 – kakush 2012-02-02 10:35:17

回答

54

您需要在.cpp文件中定義_frequency

LARGE_INTEGER WindowsTimer::_frequency; 
15

鏈接器不知道在哪裏分配數據_frequency,你必須手動告訴它。您可以通過簡單地將以下代碼行添加到您的C++源代碼中來實現此目的:LARGE_INTEGER WindowsTimer::_frequency = 0;

更詳細的解釋here

13

如果在類內聲明的靜態變量,那麼你應該在這樣

LARGE_INTEGER WindowsTimer::_frequency = 0; 
-1

cpp文件定義它在.cpp文件中添加此 extern LARGE_INTEGER WindowsTimer::_frequency

+1

由於'extern',這將不起作用。我的編譯器說*錯誤:無法顯式聲明成員'LARGE_INTEGER WindowsTimer :: _頻率'具有外部鏈接* *。另外三個答案中已經提到了沒有'extern'的解決方案。 – HolyBlackCat 2018-02-03 16:00:10

+0

它爲我工作。 – 2018-02-04 07:56:58

+0

LARGE_INTEGER是什麼? – 2018-02-04 07:57:42

相關問題