SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: m0skit0 en Jueves 2 de Julio de 2009, 12:24

Título: ¿Problemas con las cabeceras?
Publicado por: m0skit0 en Jueves 2 de Julio de 2009, 12:24
¡Hola a tod@s!  :hola:

Cada vez que intento dividir mi código en varios ficheros, me topo con lo mismo... Espero que alguien me pueda aclarar como usar los ficheros de cabecera de forma correcta, porque me parece que lo estoy haciendo mal...  :huh:

Uso gcc en Windows con Dev-Cpp (MinGW creo recordar)...

Código: C
  1. #include "global.h"
  2. #include "tablero.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     tTablero *tablero;
  7.     tFicha fichas[32];
  8.    
  9.     IniciarTablero(tablero);
  10.     IniciarFichas(fichas);
  11.    
  12.     ColocarFichasEnTablero(tablero, fichas);
  13.    
  14.     system("PAUSE");   
  15.     return 0;
  16. }
  17.  
Me marca error en la línea 2  :mellow: , función ColocarFicha():

Código: C
  1. #ifndef YACHESS_TABLERO
  2. #define YACHESS_TABLERO
  3.  
  4. #include "global.h"
  5. #include "ficha.h"
  6.  
  7. tBool IniciarTablero(tTablero* tablero);
  8. tBool ColocarFichasEnTablero(tTablero tablero, tFichas fichas[]);
  9.  
  10. #endif
  11.  

Código: Text
  1. 8 tablero.h syntax error before "tFichas"
  2.  

 :brickwall:  :hitcomp:  :no:  :alien:
Título: Re: ¿Problemas con las cabeceras?
Publicado por: Eternal Idol en Jueves 2 de Julio de 2009, 13:01
Asumo que la cabecera que dejaste es tablero.h, no tenemos global ni fecha, si dejas una minima expresion compilable del problema es mas facil de analizar. Igual por lo pronto supongo que lo rojo sobra y lo azul falta:

tBool ColocarFichasEnTablero(tTablero *tablero, tFichas fichas[]);



PD. La variable tablero del main siempre sera un puntero indefinido.
Título: Re: ¿Problemas con las cabeceras?
Publicado por: m0skit0 en Jueves 2 de Julio de 2009, 13:42
Cita de: "Eternal Idol"
tBool ColocarFichasEnTablero(tTablero *tablero, tFichas fichas[]);

Pfff, ya me vale...  -_-  -_-   :brickwall:  :lol:

Cita de: "Eternal Idol"
si dejas una minima expresion compilable del problema es mas facil de analizar

Iba a incluir un comprimido con los ficheros y se me olvidó...  -_-  -_-  :no:  :bad:

Cita de: "Eternal Idol"
La variable tablero del main siempre sera un puntero indefinido.
IniciarTablero(tablero) la inicializa :)

En fin, vaya despistes llevo hoy  :lol: ¡Muchas gracias!
Título: Re: ¿Problemas con las cabeceras?
Publicado por: m0skit0 en Jueves 2 de Julio de 2009, 13:49
Me sigue dando errores :P

Código: Text
  1. main.c In function `ColocarFicha':
  2. 5 main.c syntax error before '{' token
  3. 9 main.c syntax error before "IniciarTablero"
  4.  
:mellow:

[attachment=0:30unxhd6]yachess.zip[/attachment:30unxhd6]
Título: Re: ¿Problemas con las cabeceras?
Publicado por: Eternal Idol en Jueves 2 de Julio de 2009, 14:28
Cita de: "m0skit0"
IniciarTablero(tablero) la inicializa :)

En realidad no, tenes una variable local que es un puntero (tablero), y para que alguna funcion externa pudiera cambiarle el valor deberias pasar su direccion y no lo estas haciendo. Cualquier asignacion que hagas en IniciarTablero con el parametro que le pasas tambien sera local, sera hecha sobre otra direccion en la pila y no sobre la misma.


Demostracion simple:
Código: C++
  1. #include <stdio.h>
  2.  
  3. typedef struct _tTablero
  4. {
  5.   int x;
  6.   int y;
  7. }tTablero;
  8.  
  9. void IniciarTablero(tTablero *local)
  10. {
  11.   printf("%s %prn", __FUNCTION__, local);
  12.   local = (tTablero*)0xCACACACA;
  13.   printf("%s %prn", __FUNCTION__, local);
  14. }
  15.  
  16. int main(int argc, char **argv)
  17. {
  18.   tTablero *tablero;
  19.   printf("%s %prn", __FUNCTION__, tablero);
  20.   tablero = 0;
  21.   printf("%s %prn", __FUNCTION__, tablero);
  22.   IniciarTablero(tablero);
  23.   printf("%s %prn", __FUNCTION__, tablero);    
  24.   return 0;
  25. }
  26.  


En cuanto a los errores, fijate que te falta un ; al final de ficha.h, y segun lo que te dije antes no corregiste esta funcion ColocarFichasEnTablero ya que el primer parametro no es un puntero. Lo mismo me parece que pasa con IniciarFichas ...

Igual esto me parece contraproducente: typedef tCasilla tTablero[8][8];
Título: Re: ¿Problemas con las cabeceras?
Publicado por: m0skit0 en Jueves 2 de Julio de 2009, 16:08
Gracias Eternal Idol, creo que lo voy a dejar por hoy porque me parece que no es un buen día para programar  <_<  :bad:

Ya te cuento, ¡gracias de nuevo!
Título: Re: ¿Problemas con las cabeceras?
Publicado por: Eternal Idol en Jueves 2 de Julio de 2009, 16:54
De nada; a veces es bueno despejarse y volver al problema en otro momento  :good:
Título: Re: ¿Problemas con las cabeceras?
Publicado por: m0skit0 en Viernes 3 de Julio de 2009, 10:22
Coincido totalmente.

El problema radicaba, creo yo, en empecé a hacerlo en C++ y luego me pasé a C, pero se me quedó la orientación a objetos en la cabeza, y pensaba en clases y métodos, y programaba en C. Todo culpa del sueño  -_- , claro, no es que yo sea mal programador  :bad:  :lol:

Gracias Eternal Idol, ¡hasta otra!