ホームページ > バックエンド開発 > C++ > 静的 `constexpr char` 配列によって「未定義の参照」が発生するのはなぜですか?

静的 `constexpr char` 配列によって「未定義の参照」が発生するのはなぜですか?

Patricia Arquette
リリース: 2024-12-21 15:15:23
オリジナル
479 人が閲覧しました

Why Does My Static `constexpr char` Array Cause an

静的 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート