/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

conflicting type for remove

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
eduar2083



Registrado: 10 Ago 2008
Mensajes: 219
Ubicación: Lima - Perú

MensajePublicado: 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í Sad . 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

MensajePublicado: 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ú

MensajePublicado: 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

MensajePublicado: 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í Sad . 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)

MensajePublicado: 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ú

MensajePublicado: 07/05/2011 2:49 pm
Título:

Bueno he cambiado el nombre a la función.
Gracias, un saludo.
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com