| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
eduar2083
Registrado: 10 Ago 2008 Mensajes: 219 Ubicación: Lima - Perú
| Publicado: 06/05/2011 12:34 pm | | | Título: conflicting type for remove |
| Buenas. Estoy implementando una función llamada remove en un programa que a la vez usa el header stdio.h, el compilador me arroja un error de conflicto porque según veo ya existe dicha función en la librería, en realidad no sabía que existía. No tengo claro quién se encarga de resolver las referencias a funciones, el linker o el preprocesador. Yo pensaba que cuando se hace una llamada a función, verificaba primero si dicha función está definida en el programa y si la encontraba la referencia quedaba resuelta y sino procedía a buscar en las librerías importadas, pero según veo esto no es así . En todo caso abrá alguna forma de indicarle que se nos referimos a nuestra función y no a la de libería o no queda otra que cambiar de nombre a la función?? Un saludo. |
|
| Volver arriba | |
 |
polly
Registrado: 19 Jul 2007 Mensajes: 618
| Publicado: 06/05/2011 2:01 pm | | | Título: |
| A mi esto no me da error al compilar:
| Código: | #include <stdio.h>
int remove (const char *cad) { }
int main(void) {
remove("foo"); return 0; }
|
|
|
| Volver arriba | |
 |
eduar2083
Registrado: 10 Ago 2008 Mensajes: 219 Ubicación: Lima - Perú
| Publicado: 06/05/2011 2:28 pm | | | Título: |
| Hola, es que justamente ese es el prototipo de la función en stdio.h, ¿qué hace? pues estoy googleando y lo que hace es eliminar el archivo cuyo nombre es la cadena pasada como argumento. Yo quería implementar una función remove para mi tipo Cola cuyo parámetro no es una cadena. No me queda otra que cambiar de nombre a la función. Un saludo. |
|
| Volver arriba | |
 |
|
Karman
Registrado: 15 Oct 2005 Mensajes: 538
| Publicado: 06/05/2011 8:22 pm | | | Título: Re: conflicting type for remove |
| | eduar2083 escribió: | Buenas. Estoy implementando una función llamada remove en un programa que a la vez usa el header stdio.h, el compilador me arroja un error de conflicto porque según veo ya existe dicha función en la librería, en realidad no sabía que existía. No tengo claro quién se encarga de resolver las referencias a funciones, el linker o el preprocesador. Yo pensaba que cuando se hace una llamada a función, verificaba primero si dicha función está definida en el programa y si la encontraba la referencia quedaba resuelta y sino procedía a buscar en las librerías importadas, pero según veo esto no es así . En todo caso abrá alguna forma de indicarle que se nos referimos a nuestra función y no a la de libería o no queda otra que cambiar de nombre a la función?? Un saludo. |
el tema es que no es así, cuando vos incluis una cabecera es equivalente a hacer "copy" al código en la cabecera y un "paste" en tu archivo, ahí lo agarra el compilador e intenta compilarlo, el linker lo agarra luego mezclando los archivos compilados, lo que podes hacer es usar C++ que si soporta la sobrecarga, el código:
| Código: | #include <stdio.h>
int remove (int a) {return 0;}
int main(void) { remove(1); return 0; } |
funciona perfectamente.
S2 _________________
-. Karman .- |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 2558 Ubicación: Valladolid (España)
| Publicado: 07/05/2011 2:03 am | | | Título: |
| Hola.
Para evitar la colisión de nombres lo ideal es cambiarlo por otro y listos.
No obstante, un artificio apoyado en punteros a función que "resuelve" el problema (es C):
| Código: | #include <stdio.h>
typedef struct Nodo{int bla;/* mas bla */}Nodo;
static void foo(Nodo** p) { puts("ok remove"); } #define remove (*pf) void(*pf)(Nodo**) = foo;
int main(void) { Nodo* p; remove(&p); return 0; } |
·?0ƒ· _________________ La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí. |
|
| Volver arriba | |
 |
eduar2083
Registrado: 10 Ago 2008 Mensajes: 219 Ubicación: Lima - Perú
| Publicado: 07/05/2011 2:49 pm | | | Título: |
| Bueno he cambiado el nombre a la función. Gracias, un saludo. |
|
| Volver arriba | |
 |
|
|