C 中的靜態變數引用問題
在C 中,在非靜態類別方法中存取靜態變數可能會導致編譯錯誤,如果static變數沒有正確定義。遇到的一個常見錯誤是「對靜態變數的未定義引用。」
問題
考慮以下程式碼片段:
class Helloworld { public: static int x; void foo(); }; void Helloworld::foo() { Helloworld::x = 10; }
此程式碼旨在從非靜態方法foo() 存取靜態變數x。但是,編譯此程式碼可能會導致「對靜態變數的未定義引用」錯誤,因為靜態變數 x 缺少定義。
解
解是在類別定義之外提供靜態變數 x 的定義。這個定義可以加入在類別定義之後,如下所示:
class Helloworld { public: static int x; void foo(); }; // Definition of static variable x int Helloworld::x = 0; // Initialize x to 0 (or any appropriate value) void Helloworld::foo() { Helloworld::x = 10; }
透過在類別定義之外定義靜態變數x,編譯器可以為x定位並分配記憶體。此外,將靜態變數初始化為特定值或在沒有初始化器的情況下允許其零初始化也很重要。
透過這些修改,程式碼將成功編譯和執行,使您能夠從 Helloworld 類別的非靜態成員函數存取靜態變數 x。
以上是為什麼在 C 中存取靜態變數時會出現「未定義的靜態變數引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!