クロスコンパイラを使用しています。私のコードは:
class WindowsTimer{
public:
WindowsTimer(){
_frequency.QuadPart = 0ull;
}
private:
static LARGE_INTEGER _frequency;
};
次のエラーが表示されます。
「WindowsTimer :: _ frequency」への未定義の参照
私もそれを変更しようとしました
LARGE_INTEGER _frequency.QuadPart = 0ull;
または
static LARGE_INTEGER _frequency.QuadPart = 0ull;
それでもエラーが発生します。
誰もが理由を知っていますか?
.cppファイルで_frequency
を定義する必要があります。
つまり.
LARGE_INTEGER WindowsTimer::_frequency;
リンカは、_frequency
のデータをどこに割り当てるかを知らないため、手動でデータを伝える必要があります。これを実現するには、次の行を追加します:LARGE_INTEGER WindowsTimer::_frequency = 0;
をC++ソースの1つに追加します。
より詳細な説明 こちら
クラス内で宣言された静的変数がある場合は、次のようにcppファイルで定義する必要があります
LARGE_INTEGER WindowsTimer::_frequency = 0;
C++ 17を使用すると、変数 inline を宣言でき、cppファイルで変数を定義する必要がなくなります。
inline static LARGE_INTEGER _frequency;