ホームページ >バックエンド開発 >C++ >C の静的メンバーで「未定義の参照」エラーが発生するのはなぜですか?

C の静的メンバーで「未定義の参照」エラーが発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 22:27:13435ブラウズ

Why Am I Getting

静的メンバーへの未定義の参照: 初心者ガイド

静的データ メンバーは、クラスのインスタンス間で情報を共有するためによく使用されます。ただし、開発者は静的データ メンバーを使用するときに「未定義の参照」エラーに遭遇することがあります。この問題は、宣言と定義の区別が原因で発生します。

宣言と定義について

宣言は、メモリ位置を指定せずに変数の存在をコンパイラに導入します。一方、定義は変数にメモリを割り当て、そのアドレスを提供します。

静的データ メンバーの場合、その宣言はクラス定義内で行われますが、アドレスは割り当てられません。実際の定義は別途指定する必要があります。

静的データ メンバーの定義

「未定義の参照」エラーを解決するには、クラス定義の外側で、通常は静的データ メンバーを明示的に定義します。実装ファイル (.cpp)。たとえば、次のコードを考えてみます。

// Header file (.h)
class Example {
    static bool exampleStaticMember;
};

// Implementation file (.cpp)
bool Example::exampleStaticMember;

整数型および列挙型の例外

整数型または列挙型の静的データ メンバーは、クラス内で直接初期化できます。定義:

class Example {
    static const int initialized = 15;
};

この場合、実装ファイル内の定義では、初期化子:

const int Example::initialized;

テンプレート内の静的データ メンバー

テンプレートの場合、静的データ メンバーはクラス宣言とともにヘッダー ファイル内で定義されます。 1 つの定義ルールの例外により、クラス テンプレートの静的データ メンバーの複数の定義が許可されます。

「static」のその他の用途

クラス スコープを超えて、「static」には次のような特徴があります。追加の意味:

  • 関数スコープ内で、関数全体で値を保持する永続オブジェクトを作成します。
  • 名前空間スコープでは、内部リンケージを使用してオブジェクトと関数を宣言しますが、この使用法はオブジェクトに対して推奨されません。

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

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