Programación General > C/C++

 [Solucionado] Globales en C++

(1/2) > >>

m0skit0:
Tengo en el fichero clases.h las especificaciones de las clases y una variable global, con un .cpp por cada implementación de clase.


--- Código: C++ ---//clases.h//Variables globalesvolatile int contador_ticks; Luego, en main.cpp tengo una función global (que se usa como rutina de interrupción):


--- Código: C++ ---//main.cpp//Rutina de interrupción del temporizadorvoid interrupcion_tick(){    contador_ticks++;}END_OF_FUNCTION(interrupcion_tick); Compila, pero el enlazado me da errores:


--- Código: Text ---ccoordenada.o(.text+0x0) In function `Z17interrupcion_tickv': 171 clases.h multiple definition of `interrupcion_tick()'  Y así en todos las compilaciones objeto (.o) de todos los .cpp.

Lo que más me intriga es que la línea que me marca de clases.h (171)... no existe, puesto que el fichero sólo tiene 168 líneas :ph34r:

Eternal Idol:
La variable contador_ticks tiene que ser declarada como extern en la cabecera (volatile no tiene sentido para una variable global, no puede estar en un registro eternamente) y tenes que definirla en un solo modulo de codigo.

m0skit0:
Sigo con los mismos errores:


--- Código: C++ ---//clases.h//Variables globalesextern volatile int contador_ticks; Esta declaración sólo aparece en clases.h. Aunque cada .cpp de clase tiene un #include "clases.h". ¿Será por esto?


--- Cita de: "Eternal Idol" ---volatile no tiene sentido para una variable global, no puede estar en un registro eternamente
--- Fin de la cita ---
La documentación de Allegro aconseja ponerlo de esta forma.

Gracias de nuevo Eternal Idol.

Eternal Idol:
No, que varios incluyan clases.h deberia funcionar con el extern (siempre que en algun modulo lo definas, pero el error seria otro). Reduci el problema a la minima expresion compilable y lo vemos, sin Allegro de ser posible.

PD. Allegro esta obsoleto ... aunque yo me confundi con register.

m0skit0:
Ahí tienes, a ver qué tal.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa