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

クロスコンパイル中に「静的メンバーへの未定義の参照」エラーが発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-18 20:46:10605ブラウズ

Why Do I Get

クロス コンパイルでの静的メンバーへの未解決の参照

クロス コンパイラを使用する場合、静的メンバーへの未解決の参照に関連するエラーが発生することがよくありますメンバー。これは、静的変数がクラス ヘッダーで宣言されているが、対応する .cpp ファイルで定義されていない場合に発生します。

問題の説明:

提供されたコード例を検討してください:

class WindowsTimer {
public:
  WindowsTimer() {
    _frequency.QuadPart = 0ull;
  } 
private:
  static LARGE_INTEGER _frequency;
};

静的変数 _frequency はクラス定義内で宣言されていますが、定義されていません。コードをビルドしようとすると、リンカーは _frequency への参照を解決できず、未定義の参照エラーが発生します。

解決策:

この問題を解決するには、静的変数は、対応する .cpp ファイルで定義する必要があります。これは次のように行うことができます:

// WindowsTimer.cpp
LARGE_INTEGER WindowsTimer::_frequency;

推論:

静的変数は、インスタンス変数とは異なり、クラスのすべてのインスタンス間で共有されます。したがって、プログラム内で単一の定義が必要です。 .cpp ファイルで静的変数を定義すると、リンカーはその変数への参照を正常に見つけて解決できます。

追加メモ:

  • エラー メッセージ「WindowsTimer::_frequency への未定義の参照」は、リンカーがコンテキスト内で変数 _frequency の定義を見つけることができないことを明示的に示しますクラス WindowsTimer` の。
  • _frequency の宣言を LARGE_INTEGER _frequency.QuadPart = 0ull; として変更します。または静的 LARGE_INTEGER _frequency.QuadPart = 0ull;これらの宣言はオブジェクト内の _frequency の個々のインスタンスにのみ適用され、静的定義には適用されないため、問題は解決しません。
  • .cpp ファイル内の静的変数の定義が一致していることを確認することが重要です。ヘッダーファイル内の宣言。不一致があると、予期しない動作やコンパイル エラーが発生する可能性があります。

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

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