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功能,希望函數能夠包含在類別中,在程式碼管理時能夠對不同功能的程式碼一目了然。也就是因為寫靜態成員的關係,才會有這許多問題出現。

留言

Facebook

這個網誌中的熱門文章

[房屋]裝潢紀錄分享- 基本包冷氣管包梁工程。把冷氣管隱藏得無影無蹤

[心得]天作之合音樂劇「阿堯 Shemenayha」 at 台北表演藝術中心 大劇院

[印尼]印尼 巴淡島 旅遊 TOP 100量販超市必買商品推薦。咖啡、生活用品、泡麵

[食記]將捷金鬱金香酒店- 河畔餐廳 主餐+自助餐吃到飽心得

[工具]線上模擬器。簡單的硬體電路模擬小工具Falstad: Circuit Simulatior Applet

[城市尋寶]新竹市古城解密遊戲「城隍考卷」闖關心得

[開箱]三星平板Samsung Tab A7 Lite 使用心得分享

為您推薦