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


91

クロスコンパイラを使用しています。私のコードは:

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;

しかし、まだエラーが発生しています。

誰もが理由を知っていますか?



どこで(どこかで)定義しました WindowsTimer::_frequencyか?
CBベイリー

@CharlesBaileyそれはクラスの私の唯一のメンバーです。
kakush 2012

回答:


107

_frequency.cppファイルで定義する必要があります。

すなわち

LARGE_INTEGER WindowsTimer::_frequency;

なぜそうする必要があるのですか?
nowox

35

リンカはデータをどこに割り当てるかわからないため_frequency、手動で指示する必要があります。これLARGE_INTEGER WindowsTimer::_frequency = 0;は、C ++ソースの1つに次の行を追加するだけで実現できます。

ここでより詳細な説明



24

クラス内で宣言された静的変数がある場合は、次のようにcppファイルで定義する必要があります。

LARGE_INTEGER WindowsTimer::_frequency = 0;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.