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

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

Barbara Streisand
Barbara Streisand原創
2024-12-23 08:41:17784瀏覽

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中文網其他相關文章!

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