2012-02-02 1 views
32

Estoy usando un compilador cruzado. Mi código es:Referencia no definida a un miembro estático

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

me sale el siguiente error:

undefined reference to `WindowsTimer::_frequency'

También traté de cambiarlo a

LARGE_INTEGER _frequency.QuadPart = 0ull; 

o

static LARGE_INTEGER _frequency.QuadPart = 0ull; 

pero estoy sigue recibiendo errores

¿Alguien sabe por qué?

+0

posible duplicado de [referencia no definida para miembro estático, error de vinculador] (http://stackoverflow.com/questions/9074073/reflexión-de-referencia-a-base-objeto-enlace-error-cw-freeglut) – iammilind

+0

Dónde (si en cualquier lugar)) ¿has _definido_ 'WindowsTimer :: _ frequency'? –

+0

@CharlesBailey Es mi único miembro en la clase. – kakush

Respuesta

54

Debe definir _frequency en el archivo .cpp.

decir

LARGE_INTEGER WindowsTimer::_frequency; 
15

enlazador no sabe dónde asignar los datos de _frequency y hay que contar manualmente. Puede lograr esto simplemente agregando esta línea: LARGE_INTEGER WindowsTimer::_frequency = 0; en una de sus fuentes de C++.

más detallada explicación here

13

Si hay una variable estática declarado dentro de la clase, entonces debería definirlo en el archivo CPP como esto

LARGE_INTEGER WindowsTimer::_frequency = 0; 
-1

Añadir este extern LARGE_INTEGER WindowsTimer::_frequency en el archivo .cpp .

+1

Esto no funcionará debido a 'extern'. Mi compilador dice '' error: no se puede declarar explícitamente que el miembro 'LARGE_INTEGER WindowsTimer :: _ frequency' tenga un enlace externo' *. Y la misma solución sin "extern" ya se menciona en otras tres respuestas. – HolyBlackCat

+0

Me funcionó. –

+0

¿qué es LARGE_INTEGER? –

Cuestiones relacionadas