[C con Clase] Ayuda: Como declaro variables en un proyecto?

D1e6o! diegogeid en gmail.com
Jue Feb 15 14:37:47 CET 2007


El pasado 2007-02-14 04:23:52, Steven Davidson escribió:
 Muchísimas gracias!!!! Es exactamente eso lo que buscaba... Y me sirvió por completo. REALMENTE GRACIAS..! SALUDOS!


SD> Hola Diego,
SD> El pasado 2007-02-14 03:27:29, D1e6o! escribió:
SD> D> Muchas gracias a ambos!!!
SD> D> No lo estoy haciendo bien... je. Lo que hice es siguiendo sus mensajes:
SD> D> En tempor.c
SD> D> #include <windows.h>
SD> D> // Ahora acá esta el problema. No se como declarar freq para poder utilizarla tanto en main como en tempor y que esta tenga el mismo valor, no que cree una variable para cada modulo
SD> D>  DWORD TiempoActual(void)
SD> D>  {
SD> D>    LARGE_INTEGER cuenta;
SD> D>    QueryPerformanceCounter(&cuenta);//retorna el valor en ticks
SD> D>      //paso a milisegundos y lo retorno
SD> D>    return ((DWORD) ((cuenta.QuadPart*1000 ) / freq.QuadPart));
SD> D>  }
SD> D>  
SD> D>   char InitTimer(void)
SD> D>  {
SD> D>   if (!QueryPerformanceFrequency(&freq)) return(0);
SD> D>  }
SD> D> En decla.h
SD> D> #ifndef  _DECLA
SD> D> #define  _DECLA
SD> D> DWORD GetTimer(void);
SD> D> char InitTimer(void);
SD> D> #endif
SD> D> En main.cpp
SD> D> ...
SD> D> #include "decla.h"
SD> D> ...
SD> D> LARGE_INTEGER freq;
SD> D> Lo que no se es como declarar LARGE_INTEGER freq en tempor.c para que sea utlilizada con el mismo valor que en main.cpp y la pueda utilizar tanto en rutinas de main como de temp, porque si la declaro en decla.h e incluyo decla.h en tempo.c ¿no tiene un valor distinto para cada modulo?
SD> D> Porque los errores son:
SD> D> In function `TiempoActual':
SD> D> freq undeclared (first use in this function)
SD> D> (Each undeclared identifier is reported only once for each function it appears in.)
SD> D> In function `InitTimer':
SD> D> freq undeclared (first use in this function)
SD> D> Por otro lado si vuelvo a declarar freq en tempo (cosa que creo que está mal porque tendría un valor en ese modulo y otro en otro) me da otro error:   [Linker error] undefined reference to `TiempoActual()'
SD> D> Cual sería la declaración correcta de variables en los distintos módulos? Muchas Gracias...! (siempre esquivo usar mas de un archivo fuente porque tengo esos problemas.. :( )
SD> El problema es con el enlazador, como ya has notado. Lo que tienes que hacer es indicar al enlazador que tal variable es común y que será compartida. Para esto, tienes que indicar 'extern' como modificador para la declaración. Esto es,
SD> // decla.c
SD> extern LARGE_INTEGER freq;
SD> // tempor.c
SD> extern LARGE_INTEGER freq;
SD> // main.c
SD> LARGE_INTEGER freq;  // Definimos aquí la variable
SD> Ahora la variable 'freq' existe en "main.c", mientras que para los otros ficheros fuentes, la variable realmente es una referencia para el enlazador. En otras palabras, sólo existe una sola variable 'freq'.
SD> Espero que esto te sirva.
SD> Steven
SD> _______________________________________________
SD> Lista de correo Cconclase Cconclase en listas.conclase.net
SD> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
SD> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Más información sobre la lista de distribución Cconclase