首頁 > 後端開發 > C++ > 為什麼在類別方法中使用靜態 constexpr char 陣列時出現「未定義引用」錯誤?

為什麼在類別方法中使用靜態 constexpr char 陣列時出現「未定義引用」錯誤?

Barbara Streisand
發布: 2024-12-23 08:41:17
原創
740 人瀏覽過

Why Do I Get an

對靜態constexpr char[] 的未定義引用

嘗試在類別方法中存取靜態constexpr 字元數組時,可能會遇到「未定義引用」錯誤。當數組的宣告和初始化發生在類別定義中,但定義本身被省略時,就會出現此問題。

問題:

// header file (.hpp)
struct foo {
  void bar();
  static constexpr char baz[] = "quz"; // Declaration and initialization
};

// implementation file (.cpp)
void foo::bar() {
  std::string str(baz); // "undefined reference to baz" error
}
登入後複製

解決方案:

要解決此問題,您必須在實作檔案中為靜態成員提供單獨的定義(.cpp) 除了類別定義(.hpp)中的聲明:

// implementation file (.cpp)
constexpr char foo::baz[]; // Definition
登入後複製

說明:

編譯器同時需要宣告並定義靜態成員的名稱以了解其記憶體位置及其初始值。類別定義中的聲明僅指定成員的類型和名稱,而定義則提供實際的記憶體分配和初始化。透過將定義與聲明分開,您可以確保編譯器擁有在編譯期間將成員連結到其定義的所有必要資訊。

以上是為什麼在類別方法中使用靜態 constexpr char 陣列時出現「未定義引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板