C++程式筆記-靜態成員未宣告導致編譯錯誤
這是一個在寫程式時遇到的小Bug,是關於Visual C++的類別(class)使用靜態成員(static)時在編譯上產生錯誤的問題。下面為專案建置後,系統所發出的錯誤內容:
Motion.obj : error LNK2001: 無法解析的外部符號 "public: static double Motion::Wt" (?Wt@Motion@@2NA)
經過一番的查找與調查,終於發現是我沒有將類別中的靜態變數初始化的緣故。在.h檔已將static變數宣告在class下,所以在.c檔案中補上初始化的部分問題就解決了。
double Motion::Wt = 0.0 ;
類別靜態成員的生命週期就等同於全域變數,即使物件沒有被宣告也可以直接使用,因此,靜態函數只能夠調用同類別中的靜態成員跟全域變數。靜態變數除了要宣告之外,還要記得初始化!
當初會使用到靜態函數是基於使用Thread功能,希望函數能夠包含在類別中,在程式碼管理時能夠對不同功能的程式碼一目了然。也就是因為寫靜態成員的關係,才會有這許多問題出現。
Motion.obj : error LNK2001: 無法解析的外部符號 "public: static double Motion::Wt" (?Wt@Motion@@2NA)
經過一番的查找與調查,終於發現是我沒有將類別中的靜態變數初始化的緣故。在.h檔已將static變數宣告在class下,所以在.c檔案中補上初始化的部分問題就解決了。
double Motion::Wt = 0.0 ;
類別靜態成員的生命週期就等同於全域變數,即使物件沒有被宣告也可以直接使用,因此,靜態函數只能夠調用同類別中的靜態成員跟全域變數。靜態變數除了要宣告之外,還要記得初始化!
當初會使用到靜態函數是基於使用Thread功能,希望函數能夠包含在類別中,在程式碼管理時能夠對不同功能的程式碼一目了然。也就是因為寫靜態成員的關係,才會有這許多問題出現。
留言
張貼留言