Подтвердить что ты не робот

Undefined ссылка на статический член

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

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

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

undefined ссылка на `WindowsTimer:: _ frequency '

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

LARGE_INTEGER _frequency.QuadPart = 0ull;

или

static LARGE_INTEGER _frequency.QuadPart = 0ull;

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

кто знает почему?

4b9b3361

Ответ 1

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

то есть.

LARGE_INTEGER WindowsTimer::_frequency;

Ответ 2

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

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

Ответ 3

Если в классе есть статическая переменная, то вы должны определить ее в файле cpp, например,

LARGE_INTEGER WindowsTimer::_frequency = 0;

Ответ 4

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

inline static LARGE_INTEGER _frequency;