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