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

為什麼在 C 類中使用靜態 constexpr char 數組時出現「未定義引用」錯誤?

Susan Sarandon
發布: 2024-12-19 14:13:10
原創
807 人瀏覽過

Why Do I Get an

對Static constexpr char[]

的未定義引用在C 中,在類別中聲明static const char 數組並在類別中使用它時成員函數時,可能會遇到指示未定義引用的錯誤。此錯誤是由於靜態成員中的宣告和定義分離而產生的。

問題

考慮以下範例:

// header file (foo.hpp)
struct Foo {
  void bar();
  static constexpr char baz[] = "qux";
};

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

在此例如,靜態 const char 陣列 baz 在類別中聲明但未定義。使用 GCC 編譯程式碼會出現錯誤「undefined reference to baz」。

解決方案

要解決此問題,您需要提供 static 的定義cpp 檔案中的成員。此定義指定了數組的實際內容。在上面的範例中,將以下行加入cpp 檔案:

constexpr char Foo::baz[];
登入後複製

Explanation

在C 中,靜態成員需要聲明和定義,這是獨立的實體。聲明指定成員的類型和名稱,而定義提供其實際實作或值。

對於在類別中宣告的靜態成員,聲明通常與任何初始值設定項一起出現在類別定義中。但是,該定義必須在類別定義之外提供,通常在單獨的 cpp 檔案中或在類別定義的末尾。

透過為靜態成員 baz 提供定義,連結器將能夠解析其引用並產生必要的程式碼。如果沒有定義,連結器無法確定陣列的實際內容,並會導致未定義的參考錯誤。

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

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