對靜態constexpr Char 陣列的未定義引用:了解未定義引用問題
在C 靜態程式語言中,可以定義靜態常數程式類型中的字元數組。但是,開發人員在嘗試在程式碼中引用此類數組時可能會遇到“未定義的引用”錯誤。出現此錯誤的原因是編譯器需要靜態成員的宣告和定義。
要解決此問題,應如下修改程式碼。在類別定義(.hpp 檔案)中,靜態陣列的宣告和初始化應保留在類別內部。在實作檔案(.cpp檔案)中,應新增單獨的一行來提供靜態陣列的定義。
// .hpp struct foo { void bar(); static constexpr char baz[] = "quz"; }; // .cpp void foo::bar() { std::string str(baz); // now compiles successfully } constexpr char foo::baz[]; // definition of static member
透過單獨提供靜態成員的定義,編譯器可以連結引用正確地寫入數組,解決了未定義的引用錯誤。宣告和定義之間的這種分離是必要的,因為在編譯期間必須知道陣列的大小,而其初始化可以推遲到以後。
以上是為什麼 C 中的靜態 constexpr Char 陣列會出現「未定義引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!