首頁 >後端開發 >C++ >為什麼 C 中的靜態 constexpr Char 陣列會出現「未定義引用」錯誤?

為什麼 C 中的靜態 constexpr Char 陣列會出現「未定義引用」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-12-23 04:07:27490瀏覽

Why Do I Get an

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

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