Referência indefinida para um membro estático

Eu estou usando um compilador cruzado. Meu código é:

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

Estou tendo o erro a seguir:

Referência indefinida para `WindowsTimer :: _ frequency ‘

Eu também tentei mudar isso para

 LARGE_INTEGER _frequency.QuadPart = 0ull; 

ou

 static LARGE_INTEGER _frequency.QuadPart = 0ull; 

mas ainda estou recebendo erros.

Alguém sabe por quê?

Você precisa definir _frequency no arquivo .cpp.

ou seja

 LARGE_INTEGER WindowsTimer::_frequency; 

O vinculador não sabe onde alocar dados para _frequency e você precisa informar manualmente. Você pode conseguir isso simplesmente adicionando esta linha: LARGE_INTEGER WindowsTimer::_frequency = 0; em uma das suas fonts C ++.

Explicação mais detalhada aqui

Se houver uma variável estática declarada dentro da class, você deve defini-la no arquivo cpp como este

 LARGE_INTEGER WindowsTimer::_frequency = 0;