Dev-C++

maRc

Estoy haciendo un programa en C con este entorno, pero se me presenta un problema.

El programa está dividido en varios ficheros. Las estructuras de datos que utilizo se utilizan en varios de los ficheros, por lo que he decidido crear un fichero de cabecera en el que están definidas las estructuras, para luego incluirlo en el resto de ficheros que lo utilizan con un #include.
El problema llega a la hora de compilar, y es que debido a que la cabecera de las estructuras se encuentra en varios ficheros fuente, da error debido a que se declaran dos veces dichas estructuras.

¿Qué puedo hacer para poder compilar? Hasta ahora lo que tenía todo en el mismo fichero, pero se estaba quedando demasiado grande :/

Muchas gracias.

Edit: xD

Alperini

es #include xd

PD : El problema no lo se :\

aLeX

Podrías explicar un poco mejor el problema? Poner un ejemplo quizás.

El problema es que tienes definidas mismas funciones con mismos nombres en distintos ficheros ¿no? y que luego enlazas con includes desde el principal ?

Alperini

yo quisiera saber como poder sacar el codigo de un .dll

PD : Es para no poner otro tema XD

maRc

Tengo unas estructuras (struct player y struct ball) definidas en un fichero de cabecera llamado "definitions.h". El programa quiero dividirlo en varios ficheros, para que cada fichero se tenga las funciones que se encargan de hacer algo similar, por ejemplo, uno con funciones que usan las SDL (sdl_functions.c) y otro con las funciones que controlan el juego (game.c). Las que controlan el juego se encargan de poner en marcha el juego (poner a los jugadores, moverlos por la pantalla), y las funciones de las SDL se encargan de mostrarlo por la pantalla y reproducir los sonidos y eso.

El problema es que algunas de las funciones que usan las SDL y las funciones que controlan el juego utilizan las mismas estructuras (unas para mostrar a los jugadores por la pantalla y las otras para controlarlos).

Entonces, si incluyo el fichero "definitions.h" en cada uno de los fichero fuente sdl_functions.c y game.c, al compilar con el Dev-C++ da error de que ha habido una declaración previa de la estructura player y la estructura ball.

Si meto todas las funciones en un solo fichero fuente, e incluyo en el de cabecera definitions.h, si que funciona, pero se queda un fichero enorme, y me gustaría tenerlo separado.
¿Qué puedo hacer para que no de este error? O sea, cambiar alguna opción o algo para que pueda compilar bien.

PD: Si genero el código objeto de cada fichero (el sdl_functions.c y el game.c) por separado y luego los enlazo si que funciona correctamente, pero en este caso lo tengo que hacer todo a mano y es un poco coñazo ;)

PPD: Si no contesto es que estoy en el pueblo sin internet, ya responderé cuando vuelva :)

CeeC

Tienes dos opciones:

1) Establecer una jerarquía de includes, en la que el fichero en el nivel más alto de dicha jerarquía incluya al siguiente nivel, etc. Por ejemplo: ppal -> lista -> cadena. La clase cadena estaría incluída en la clase lista y ésta en el programa principal.

2) Definir si no está definido. En el .h del fichero añade esto al principio (antes de los includes y definición de la clase/estructuras):

#ifndef FICHERO_H
#define FICHERO_H

y en su final

#endif

De esta forma si el fichero se ha definido previamente no lo vuelve a hacer. En caso contrario, lo hace.

Saludos.

PeLoTaSo

#2 es #include :Þ

Alperini

es verdad se me paso una i :D , sorry ^^

javithelong

Con esto solucionas el problema, como han dicho arriba, son instrucciones de precompilador que, en caso de no estar definidas, las definen. En lugar del fichero, pon el nombre de tu fichero

//Al principio del fichero
#ifndef FICHERO_H
#define FICHERO_H

//Al final del fichero
#endif

Usuarios habituales

  • javithelong
  • Alperini
  • PeLoTaSo
  • CeeC
  • maRc
  • aLeX