Undefinierter Verweis auf ein statisches Element


84

Ich benutze einen Cross-Compiler. Mein Code lautet:

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

Ich erhalte folgende Fehlermeldung:

undefinierter Verweis auf "WindowsTimer :: _ Frequenz"

Ich habe auch versucht, es zu ändern

LARGE_INTEGER _frequency.QuadPart = 0ull;

oder

static LARGE_INTEGER _frequency.QuadPart = 0ull;

aber ich bekomme immer noch Fehler.

weiß jemand warum?



Wo (wenn überhaupt) haben Sie definiert WindowsTimer::_frequency ?
CB Bailey

@ CharlesBailey Es ist mein einziges Mitglied in der Klasse.
Kakush

Antworten:


103

Sie müssen _frequencyin der CPP-Datei definieren.

dh

LARGE_INTEGER WindowsTimer::_frequency;

32

Linker weiß nicht, wo Daten zugeordnet werden sollen, _frequencyund Sie müssen dies manuell mitteilen. Sie können dies erreichen, indem Sie einfach diese Zeile hinzufügen: LARGE_INTEGER WindowsTimer::_frequency = 0;in eine Ihrer C ++ - Quellen.

Detailliertere Erklärung hier


26

Mit C ++ 17 können Sie Ihre Variable inline deklarieren , ohne sie mehr in einer CPP-Datei definieren zu müssen.

inline static LARGE_INTEGER _frequency;

Dies gibt mir einen Fehlererror: 'foobar' declared as an 'inline' field
Pedro Henrique

3
NVM, ich habe gerade mein GCC über den MinGW-Manager von 6.3 auf 8.2 aktualisiert und es funktioniert einwandfrei.
Pedro Henrique

23

Wenn in der Klasse eine statische Variable deklariert ist, sollten Sie sie in der cpp-Datei wie folgt definieren

LARGE_INTEGER WindowsTimer::_frequency = 0;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.