2012-05-05 10 views
9

En primer lugar, solo he usado realmente métodos Objective-c en mi programación. Decidí hacer un par de cálculos matemáticos rápidos como funciones c y luego terminé necesitándolos para múltiples clases. Entonces, puse las funciones c en un archivo .h por separado. Esto funciona bien hasta que intento importar el archivo .h en más de una clase. Entonces obtengo este error:Error duplicado de símbolo de las funciones C en Objective-C

Duplicate Symbol *_myFunction* blah blah blah Linker command failed with exit code 1 (use -v to see invocation)

¿Cómo puedo usar una función c en más de una clase sin este error de enlace? Intenté simplemente definir las funciones en las clases en las que las necesito, pero parece que incluso si son clases diferentes, obtengo este error si el nombre de la función es el mismo. Probablemente estoy loco aquí, pero algunos ayudarían a entender sería genial.

Respuesta

14

Debe colocar las declaraciones en el archivo .h, hacer que sean externas y mover las definiciones a un archivo .c o .m.

De esta

myfunctions.h

int max(int a, int b) { 
    return a>b ? a : b; 
} 

Mover a esto:

myfunctions.h

extern int max(int a, int b); // declaration 

myfunctions.c

int max(int a, int b) { 
    return a>b ? a : b; 
} 
+1

+1, pero ¿por qué hacer que la declaración de función extern? – MByD

+0

@BinyaminSharet Tienes razón, sigo olvidando que 'extern' es completamente opcional en las declaraciones :) – dasblinkenlight

+0

Justo lo que necesitaba saber. ¡Gracias! – daveMac

Cuestiones relacionadas