[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