2012-02-02 24 views
32

Sto utilizzando un cross-compilatore. Il mio codice è:Riferimento non definito a un membro statico

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

ottengo il seguente errore:

undefined reference to `WindowsTimer::_frequency'

Ho provato anche a cambiare per

LARGE_INTEGER _frequency.QuadPart = 0ull; 

o

static LARGE_INTEGER _frequency.QuadPart = 0ull; 

ma sono ancora ricevendo errori.

qualcuno sa perché?

+0

possibile duplicato di [riferimento non definito per membro statico, errore linker] (http://stackoverflow.com/questions/9074073/undefined-reference-to-baseobject-linker-error-cw-freeglut) – iammilind

+0

Dove (se disponibile) hai _defined_ 'WindowsTimer :: _ frequency'? –

+0

@CharlesBailey È il mio unico membro della classe. – kakush

risposta

54

è necessario definire _frequency nel file cpp.

cioè

LARGE_INTEGER WindowsTimer::_frequency; 
15

Linker non sa dove allocare i dati per _frequency e bisogna dire manualmente. È possibile ottenere ciò aggiungendo semplicemente questa riga: LARGE_INTEGER WindowsTimer::_frequency = 0; in una delle sorgenti C++.

più dettagliata spiegazione here

13

Se c'è una variabile statica dichiarata all'interno della classe allora si dovrebbe definire nel file cpp come questo

LARGE_INTEGER WindowsTimer::_frequency = 0; 
-1

Aggiungere questo extern LARGE_INTEGER WindowsTimer::_frequency nel file cpp .

+1

Questo non funzionerà a causa di 'extern'. Il mio compilatore dice * 'errore: non è possibile dichiarare esplicitamente il membro 'LARGE_INTEGER WindowsTimer :: _ frequency' per avere il link esterno * *. E la stessa soluzione senza 'extern' è già menzionata in altre tre risposte. – HolyBlackCat

+0

Ha funzionato per me. –

+0

cosa è LARGE_INTEGER ?? –

Problemi correlati