Estou usando um compilador cruzado. Meu código é:
class WindowsTimer{
public:
WindowsTimer(){
_frequency.QuadPart = 0ull;
}
private:
static LARGE_INTEGER _frequency;
};
Eu obtenho o seguinte erro:
referência indefinida a `WindowsTimer :: _ frequência '
Eu também tentei mudar para
LARGE_INTEGER _frequency.QuadPart = 0ull;
ou
static LARGE_INTEGER _frequency.QuadPart = 0ull;
mas ainda estou recebendo erros.
alguém sabe por quê?
WindowsTimer::_frequency
?Respostas:
Você precisa definir
_frequency
no arquivo .cpp.ie
fonte
O Linker não sabe para onde alocar os dados
_frequency
e você tem que dizer isso manualmente. Você pode fazer isso simplesmente adicionando esta linha:LARGE_INTEGER WindowsTimer::_frequency = 0;
em uma de suas fontes C ++.Explicação mais detalhada aqui
fonte
Com C ++ 17, você pode declarar sua variável embutida , não há mais necessidade de defini-la em um arquivo cpp.
inline static LARGE_INTEGER _frequency;
fonte
error: 'foobar' declared as an 'inline' field
Se houver uma variável estática declarada dentro da classe, você deve defini-la no arquivo cpp como este
LARGE_INTEGER WindowsTimer::_frequency = 0;
fonte