[C con Clase] Error en programacion multi-fichero.
Jorge Vega Sanchez
memmaker650 en gmail.com
Vie Ene 29 20:21:35 CET 2010
Muchísimas gracias. No me habia dado cuenta de la recurrencia , por
eso me salían esos mensajes al intentar compilar. Sobre la variable
extern, no sabía muy bien su uso y ahora ya lo he comprendido
perfectamente y sí que tengo que usar variables globales.
On 29/01/2010, at 19:37, Steven Davidson wrote:
> Hola Jorge,
>
> Jorge Vega Sanchez wrote:
>> Buenas.
>> He preguntado en ocsaiones anteriores sobre la división de código en
>> varios ficheros. Bueno pues tras leerme los consejos que dabais me
>> he puesto a hacer una prueba sencilla para ver si tenia cogidos los
>> conceptos. Llevo 2 horas intentando buscar donde está el error en
>> este sencillo programa pero no enceuntro nada.
>> Al compilar se pega como 2 segundos en un bucle dadndo errores y al
>> final salen errores incongruentes por pantalla que los compruebo en
>> el código y están bien.
>> Adjunto los ficheros a ver si alguno me puede ayudar.
>> Para compilar uso g++ y la siguiente isntruccion
>> g++ prueba.cpp funciones.h funciones.cpp -o test
>
> El problema está en "funciones.h", ya que #incluyes el fichero
> "prueba.cpp" y éste #incluye "funciones.h". Por lo tanto, existe una
> recursividad indirecta. Un fichero incluye al otro y éste incluye al
> anterior que intenta incluir el segundo el cual a su vez intenta
> incluir el primero y así sucesivamente. Esto no es lo que quieres.
> Además, date cuenta que "funciones.h" no necesitas saber
> absolutamente nada acerca de "prueba.cpp".
>
> El otro error es que usas 'num' en "funciones.cpp" sin previa
> declaración. Podrías hacer esto:
>
> // funciones.cpp
>
> int num;
>
> Ahora bien, sospecho que quieres usar la definición de 'num' que
> hiciste en "prueba.cpp". Lo anterior definirá otra variable 'num'
> que será diferente a la que definiste en "prueba.cpp". Como cada
> fichero fuente es compilado independientemente de los demás, debes
> indicar al enlazador que se trata de la misma variable. Esto lo
> hacemos con 'extern'. Esto es,
>
> // funciones.cpp
>
> extern int num;
>
> Con esto, realizamos una declaración y no una definición; es decir,
> no creamos una variable ni por tanto creamos memoria para ella.
>
> Claro está, no deberías usar variables globales, pero como se trata
> de un programa de prueba, puedes seguir con ello.
>
>
> Espero haber aclarado las dudas.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Más información sobre la lista de distribución Cconclase