ホームページ > バックエンド開発 > C++ > クラス メソッドで静的な constexpr char 配列を使用すると「未定義の参照」エラーが発生するのはなぜですか?

クラス メソッドで静的な constexpr char 配列を使用すると「未定義の参照」エラーが発生するのはなぜですか?

Barbara Streisand
リリース: 2024-12-23 08:41:17
オリジナル
783 人が閲覧しました

Why Do I Get an

静的 constexpr char[] への未定義の参照

クラス メソッド内で静的 constexpr 文字配列にアクセスしようとすると、「未定義の参照」エラーが発生することがあります。この問題は、配列の宣言と初期化がクラス定義内で発生するが、定義自体が省略されている場合に発生します。

問題:

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

// implementation file (.cpp)
void foo::bar() {
  std::string str(baz); // "undefined reference to baz" error
}
ログイン後にコピー

解決策:

この問題を解決するには、実装ファイルで静的メンバーに別の定義を提供する必要があります。クラス定義 (.hpp) の宣言に加えて (.cpp):

// implementation file (.cpp)
constexpr char foo::baz[]; // Definition
ログイン後にコピー

説明:

コンパイラーには宣言と定義の両方が必要です静的メンバーのメモリ位置と初期値を知るために。クラス定義内の宣言ではメンバーの型と名前のみが指定されますが、定義では実際のメモリ割り当てと初期化が行われます。定義を宣言から分離することで、コンパイル中にメンバーをその定義にリンクするために必要な情報がすべてコンパイラーに確実に含まれるようになります。

以上がクラス メソッドで静的な constexpr char 配列を使用すると「未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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