静的 constexpr char[] への未定義の参照
クラスのメンバーとして静的 const char 配列を作成しようとすると、次のようになります。 「未定義の参照」というエラーが発生しますbaz."
説明:
GCC では、静的 const 配列に constexpr を使用する必要があります。ただし、配列宣言と初期化子をクラス定義内に配置するだけでは十分ではありません。 .cpp ファイルに別の メンバー定義 も指定する必要があります。
これを解決するには:
.cpp ファイルに、クラス宣言の後の次の行:
constexpr char foo::baz[];
これは静的メンバーの定義を宣言しますbaz.
クラス定義内の配列の宣言と初期化はそのままにしておきます:
// .hpp struct foo { void bar(); static constexpr char baz[] = "quz"; };
理由:
クラス定義は、静的メンバーの宣言と初期化子を提供します。ただし、メモリを割り当てて配列を初期化するメンバー定義は、.cpp ファイルで個別に提供する必要があります。この定義を追加すると、リンカはシンボル baz を見つけて、未定義の参照を解決できるようになります。
以上が静的 `constexpr char` 配列によって「未定義の参照」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。