ホームページ > バックエンド開発 > C++ > C での「静的メンバーへの未定義の参照」エラーの原因とその解決方法

C での「静的メンバーへの未定義の参照」エラーの原因とその解決方法

Linda Hamilton
リリース: 2024-12-09 00:39:13
オリジナル
659 人が閲覧しました

What Causes

静的メンバーへの未定義の参照があるとはどういう意味ですか?

C では、静的メンバー変数は、オブジェクト インスタンスから独立して存在するクラス変数です。 。通常、これはコンパイル時に初期化され、クラスのすべてのインスタンスで共有できます。

ただし、定義を指定せずに静的メンバー変数を宣言すると、コンパイラーは「未定義の参照」に関するエラー メッセージを生成します。 。」これは、コンパイラが静的変数にアクセスするコードを生成するために静的変数のメモリ位置を知る必要があるためです。

このエラーを解決するには、ソース ファイルで静的メンバー変数の定義を提供する必要があります ( .cpp ファイル)。定義はヘッダー ファイル (.h ファイル) の宣言と同じ名前にする必要がありますが、その前にスコープ演算子 (::) を付ける必要があります。例:

// header file
class Example {
public: 
    static int x;
};

// source file
int Example::x;
ログイン後にコピー

これにより、静的変数 x のメモリ位置が定義され、コンパイラがそれにアクセスするコードを生成できるようになります。

特殊なケース

  • Const 整数型または列挙型: 静的メンバーの場合const 整数型または列挙型の変数の場合、ヘッダー ファイルのクラス宣言で初期化子を指定できます。ソース ファイル内の定義には初期化子を含めることはできません。
  • Templates: クラス テンプレートの静的メンバー変数の場合、定義はクラス定義とともにヘッダー ファイルに指定する必要があります。

static のその他の使用法

static キーワードは、クラス スコープにないオブジェクトまたは関数に適用される場合、異なる意味を持ちます:

  • 関数スコープ内のオブジェクト: の最初の実行時に初期化されるオブジェクトを宣言します。
  • 名前空間スコープのオブジェクトまたは関数: オブジェクトを宣言します。または内部リンケージを持つ関数。これはオブジェクトでは非推奨です。

以上がC での「静的メンバーへの未定義の参照」エラーの原因とその解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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