Używam kompilatora krzyżowego. Mój kod to:
class WindowsTimer{
public:
WindowsTimer(){
_frequency.QuadPart = 0ull;
}
private:
static LARGE_INTEGER _frequency;
};
Otrzymuję następujący błąd:
niezdefiniowane odniesienie do `WindowsTimer :: _ frequency '
Próbowałem też zmienić to na
LARGE_INTEGER _frequency.QuadPart = 0ull;
lub
static LARGE_INTEGER _frequency.QuadPart = 0ull;
ale nadal otrzymuję błędy.
ktoś wie dlaczego?
WindowsTimer::_frequency
?Odpowiedzi:
Musisz zdefiniować
_frequency
w pliku .cpp.to znaczy
źródło
Linker nie wie, gdzie przydzielić dane
_frequency
i musisz to powiedzieć ręcznie. Możesz to osiągnąć poprzez proste dodanie tej linii:LARGE_INTEGER WindowsTimer::_frequency = 0;
do jednego ze źródeł C ++.Bardziej szczegółowe wyjaśnienie tutaj
źródło
W C ++ 17 możesz zadeklarować zmienną w tekście , nie musisz już definiować jej w pliku cpp.
inline static LARGE_INTEGER _frequency;
źródło
error: 'foobar' declared as an 'inline' field
Jeśli wewnątrz klasy jest zadeklarowana zmienna statyczna, należy ją zdefiniować w pliku cpp w ten sposób
LARGE_INTEGER WindowsTimer::_frequency = 0;
źródło