| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
ragnar131
Registrado: 16 Nov 2007 Mensajes: 5
| Publicado: 16/11/2007 4:33 pm | | | Título: Discordias con gcc |
| Hola! Veréis, como mucha gente, soy nuevo en C, y la verdad es que me he estado apañando bastante bien yo sólo (tirando de ayudas como la del buen curso que es accesible desde esta página. Estoy programando un pequeño juego de las torres de Hanoi con las librerías de Xlib en Linux. La pega viene aquí: Tengo dos ficheros, uno que es la que se encarga de la parte gráfica (realiza todas las funciones necesarias de dibujo), y otro que realiza funcionalidades como por ejemplo, salir. Concretamente he programado una función que me devuelva 1, si las coordenadas que le paso están dentro de los límites del cuadrado del "botón" salir. Parece fácil: int salir(int x, int y){ int i = 0; if ((x>= 525 && x<= 565)&&(y>=20 && y<= 35)){ //Estamos en la zona del botón Salir; i = 1; } return i; }//salir
Vale, a comentar, que encima de esta función, hay una de tipo void, que funciona perfectamente, y que es totalmente independiente de esta.
Cuando desde el fichero gráfico hago esta llamada: if(1==salir(cor_x,cor_y)){ printf("Escogida la opción salir.\n"); //XUnloadFont(display, font_info->fid); XFreeGC(display, gc); XCloseDisplay(display); exit(1); } el compilador me dice: torres.c: En la función ‘main’: torres.c:134: error: el objeto ‘salir’ llamado no es una función
Como mención final, al compilar hago gcc juego.c torres.c -o torres ...(aquí enlazo con liberías de Xlib).
¿Alguna idea? Porque a mí me parece que está bien, y no entiendo que quiere decir con eso de que no es una función, qué iba a ser sino?
En fin, gracias por leer y esto, y si podéis ayudarme os lo agradeceré mucho. Recibid un cordial saludo. |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 16/11/2007 4:56 pm | | | Título: |
| Es dificil encontrar el error si no presentas el codigo fuente de ambas unidades y los archivos de inclusion que utilizas.
El error posiblemente se deba a que declaras una variable con el mismo nombre de la funcion. Otra posibilidad seria la falta de prototipos pero en ese caso se generaria el error "funcion redefinida ...".
Lo mejor como ya te comente es publicar el codigo fuente completo del programa y tambien compilar este en el modo mas estricto que permite GCC ya que esa es la forma mas facil de detectar errores. Para esto ultimo tienes que llamar a gcc en la forma:
| Código: | gcc -c -ansi -pedantic -Wall -O nombre.c |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | ragnar131
Registrado: 16 Nov 2007 Mensajes: 5
| Publicado: 16/11/2007 6:00 pm | | | Título: |
| Hola! Parece que el post que acabo de escribir no lo he enviado de manera correcta. Efectivamente, hay una variable y una función que se llaman de igual forma. Gracias, me habría llevado rato darme cuenta. Para una próxima ocasión publicaré el código fuente, aunque si no lo he hecho es porque me parecía excesivo para un post (sobre todo por la cantidad de código innecesario o ruido que tiene).
Por curiosidad, esa forma de llamar al compilador... ¿podrías decirme qué significan los parámetros? ¿qué fichero ejecutable generaría?¿nombre?(digo nombre, poque está a la derecha de -O y aparecere el fichero nombre.c).
En fin, gracias por todo. Recibe un saludo, Aitor. |
| | Volver arriba | |  | | rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 16/11/2007 8:45 pm | | | Título: |
| La descripcion completa de las opciones la puedes consultar revisando la "manpage" de gcc. En breve "-c" indica que solo se compile sin realizar la vinculacion, "-ansi -pedantic -Wall" indica que se compile de la forma mas estricta y "-O" se necesita para que gcc advierta en el caso de variables utilizadas sin antes ser declaradas.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | ragnar131
Registrado: 16 Nov 2007 Mensajes: 5
| Publicado: 17/11/2007 7:28 am | | | Título: |
| Gracias por todo, miraré entonces las páginas del manual. Atentamente, Aitor. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |