ホームページ  >  記事  >  バックエンド開発  >  C で「\'Bar::kConst\' への未定義の参照」エラーが発生するのはなぜですか?

C で「\'Bar::kConst\' への未定義の参照」エラーが発生するのはなぜですか?

DDD
DDDオリジナル
2024-10-31 10:12:32925ブラウズ

Why Do I Get the

C での 'Bar::kConst' への未定義の参照エラー

C で、プログラムが静的 const メンバー変数を参照しようとしたとき指定されたコード スニペットの Bar::kConst などのクラス内で、「'Bar::kConst' への未定義の参照」エラーが発生する可能性があります。このエラーは、コンパイラが変数の定義を見つけられないことを示します。

C 標準 (セクション 9.4.2/4) によれば、定数整数型または列挙型の静的データ メンバーはクラスで初期化できます。意味。ただし、プログラムで使用する場合は、名前空間スコープで明示的に定義する必要があります。

この例では、静的 const int kConst は Bar クラス内で宣言されていますが、そのままでは定義されていません。宣言で初期化されます。 foo 関数が Bar::func メソッド内で呼び出されると、const 参照によって kConst を渡そうとします。これは、C 標準 (セクション 3.2/2) に従って、変数の「使用」とみなされます。変数が明示的に定義されていないため、コンパイラは必要な置換を実行できず、エラーが発生します。

このエラーを解決するには、名前空間スコープで kConst 変数を明示的に定義するか、コードに示すように、kConst 変数を明示的に定義します。スニペットでは、static_cast を使用して kConst を一時 int に明示的に変換し、コンパイラにコンパイル時に置換を実行させます。

結論として、「'Bar::kConst' への未定義の参照」エラーは、静的const メンバー変数は明示的に定義されていませんが、プログラム内で使用する場合にはこれが必要です。このようなエラーを防ぐために、静的データ メンバーを宣言および使用するときは、C 標準に準拠することが重要です。

以上がC で「\'Bar::kConst\' への未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。