Неопределенная ссылка на статический член - PullRequest
63 голосов
/ 02 февраля 2012

Я использую кросс-компилятор. Мой код:

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

Я получаю следующую ошибку:

неопределенная ссылка на `WindowsTimer :: _quency '

Я также пытался изменить его на

LARGE_INTEGER _frequency.QuadPart = 0ull;

или

static LARGE_INTEGER _frequency.QuadPart = 0ull;

но я все еще получаю ошибки.

кто-нибудь знает почему?

Ответы [ 4 ]

81 голосов
/ 02 февраля 2012

Вам необходимо определить _frequency в файле .cpp.

т.е.

LARGE_INTEGER WindowsTimer::_frequency;
26 голосов
/ 02 февраля 2012

Линкер не знает, где разместить данные для _frequency, и вы должны указать это вручную. Вы можете добиться этого, просто добавив эту строку: LARGE_INTEGER WindowsTimer::_frequency = 0; в один из ваших источников C ++.

Более подробное объяснение здесь

18 голосов
/ 02 февраля 2012

Если внутри класса объявлена ​​статическая переменная, вы должны определить ее в файле cpp следующим образом:

LARGE_INTEGER WindowsTimer::_frequency = 0;
5 голосов
/ 10 декабря 2018

С C ++ 17 вы можете объявить вашу переменную inline , больше не нужно определять ее в файле cpp.

inline static LARGE_INTEGER _frequency;
...