ホームページ > バックエンド開発 > C++ > クロス コンパイラーが「WindowsTimer::_frequency への未定義の参照」を生成するのはなぜですか? それを修正するにはどうすればよいですか?

クロス コンパイラーが「WindowsTimer::_frequency への未定義の参照」を生成するのはなぜですか? それを修正するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-18 21:18:12
オリジナル
631 人が閲覧しました

Why Does My Cross Compiler Produce

静的メンバーへの未定義の参照

提供されたコード スニペットでは、静的メンバー変数 _frequency が WindowsTimer クラス内で定義されています。ただし、クロス コンパイラを使用してコードをコンパイルしようとすると、次のエラーが発生します。

undefined reference to `WindowsTimer::_frequency'
ログイン後にコピー

このエラーは、リンカーがリンク中に静的メンバー変数の定義を見つけられないことを示します。その理由は、静的メンバー変数はコンパイラによって自動的に初期化されず、その定義はソース ファイルで明示的に指定する必要があるためです。

解決策:

このエラーを解決するには、静的メンバー変数 _frequency の定義をプログラムのソース ファイルの 1 つで提供する必要があります。これを行うには、.cpp ファイルに次の行を追加します。

LARGE_INTEGER WindowsTimer::_frequency;
ログイン後にコピー

静的メンバー変数の定義を提供することで、リンカーはリンク中にその変数への参照とコンパイル エラーを正常に解決できます。

前の例では、_frequency.QuadPart = を使用してクラス宣言内の _frequency の定義を変更しようとしていることに注意することが重要です。 0ull または static LARGE_INTEGER _frequency.QuadPart = 0ull では問題は解決されません。これは、コンパイラーが依然としてクラス定義の外側で静的メンバー変数を明示的に定義する必要があるためです。

以上がクロス コンパイラーが「WindowsTimer::_frequency への未定義の参照」を生成するのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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