C での静的変数参照の問題
C では、静的変数が静的でない場合、非静的クラス メソッド内で静的変数にアクセスするとコンパイル エラーが発生する可能性があります。変数が正しく定義されていません。よく発生するエラーの 1 つは、「静的変数への未定義の参照」です。
問題
次のコード スニペットを考えてみましょう。
class Helloworld { public: static int x; void foo(); }; void Helloworld::foo() { Helloworld::x = 10; }
このコード非静的メソッド foo() から静的変数 x にアクセスすることを目的としています。ただし、このコードをコンパイルすると、静的変数 x に定義がないため、「静的変数への未定義の参照」エラーが発生する可能性があります。
解決策
解決策は次のとおりです。クラス定義の外で静的変数 x の定義を提供します。以下に示すように、定義はクラス定義の後に追加できます。
class Helloworld { public: static int x; void foo(); }; // Definition of static variable x int Helloworld::x = 0; // Initialize x to 0 (or any appropriate value) void Helloworld::foo() { Helloworld::x = 10; }
クラス定義の外で静的変数 x を定義することにより、コンパイラーは x にメモリを見つけて割り当てることができます。さらに、静的変数を特定の値に初期化するか、初期化子がない場合にゼロで初期化できるようにすることが重要です。
これらの変更により、コードは正常にコンパイルおよび実行され、次のことが可能になります。 Helloworld クラスの非静的メンバー関数から静的変数 x にアクセスします。
以上がC で静的変数にアクセスすると「静的変数への未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。