首頁 >後端開發 >C++ >為什麼在交叉編譯過程中出現「未定義的靜態成員引用」錯誤?

為什麼在交叉編譯過程中出現「未定義的靜態成員引用」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-12-18 20:46:10606瀏覽

Why Do I Get

交叉編譯中對靜態成員的未解析引用

使用交叉編譯器時,經常會遇到與未解析的靜態引用相關的錯誤成員。當在類別頭中聲明靜態變數但未在對應的 .cpp 檔案中定義時,就會發生這種情況。

問題說明:

考慮提供的程式碼範例:

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

靜態變數 _Frequency 在類別定義中宣告但未定義。嘗試建立程式碼時,連結器無法解析對 _Frequency 的引用,導致未定義的引用錯誤。

解:

要解決此問題,靜態變數必須在對應的.cpp 檔案中定義。這可以如下完成:

// WindowsTimer.cpp
LARGE_INTEGER WindowsTimer::_frequency;

推理:

靜態變數與實例變數不同,在類別的所有實例之間共用。因此,它們需要在程序中進行單一定義。透過在 .cpp 檔案中定義靜態變量,連結器可以成功定位並解析對其的引用。

附加說明:

  • 錯誤訊息「對WindowsTimer::_Frequency 的未定義引用」明確表示連結器無法在類別的上下文中找到變數_ Frequency的定義WindowsTimer`.
  • 修改_Frequency的宣告為LARGE_INTEGER _Frequency.QuadPart = 0ull;或靜態LARGE_INTEGER _Frequency.QuadPart = 0ull;不會解決問題,因為這些聲明僅適用於物件內_Frequency.QuadPart = 0ull;不會解決問題,因為這些聲明僅適用於物件內_Frequency.實例,而不適用於靜態定義。
  • 確保 .cpp 檔案中靜態變數的定義匹配非常重要頭檔中的宣告。不符可能會導致意外行為或編譯錯誤。

以上是為什麼在交叉編譯過程中出現「未定義的靜態成員引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn