首頁 >後端開發 >C++ >為什麼我的靜態 `constexpr char` 陣列會導致「未定義的參考」?

為什麼我的靜態 `constexpr char` 陣列會導致「未定義的參考」?

Patricia Arquette
Patricia Arquette原創
2024-12-21 15:15:23536瀏覽

Why Does My Static `constexpr char` Array Cause an

對 Static constexpr char[]的未定義引用

當嘗試建立靜態 const char當陣列作為類別的成員時,您可以遇到錯誤「未定義的引用baz."

說明:

GCC 要求您對靜態 const 陣列使用 constexpr。但是,僅將數組宣告和初始值設定項放在類別定義中是不夠的。您還必須在 .cpp 檔案中提供單獨的成員定義

要解決此問題:

  1. 在您的 .cpp文件中,加入類別宣告後的以下行:

    constexpr char foo::baz[];

    這宣告了靜態成員的定義baz.

  2. 將陣列的宣告和初始化留在類別定義中:

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

原因:

類別定義提供靜態成員的宣告和初始化器。但是,分配記憶體和初始化數組的成員定義需要在 .cpp 檔案中單獨提供。透過新增此定義,連結器將能夠找到符號 baz 並解析未定義的參考。

以上是為什麼我的靜態 `constexpr char` 陣列會導致「未定義的參考」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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