2012-05-05 9 views
9

Als Erstes habe ich in meiner Programmierung nur die Objective-c-Methoden verwendet. Ich entschied mich für ein paar schnelle mathematische Berechnungen als c-Funktionen und am Ende brauchte ich sie für mehrere Klassen. Also steckte ich die c-Funktionen in eine separate .h-Datei. Das funktioniert gut, bis ich versuche, die .h-Datei in mehr als eine Klasse zu importieren. Dann bekomme ich diesen Fehler:Doppelter Symbolfehler von C-Funktionen in Objective-C

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

Wie kann ich eine c-Funktion in mehr als einer Klasse ohne diesen Link-Fehler verwenden. Ich habe versucht, gerade die Funktionen in den Klassen zu definieren, in denen ich sie brauche, aber es scheint, dass selbst wenn sie verschiedene Klassen sind, ich diesen Fehler erhalte, wenn der Funktionsname der selbe ist. Ich bin hier wahrscheinlich verrückt, aber ein bisschen Verständnis wäre großartig.

Antwort

14

Sie sollten Deklarationen in die .h-Datei einfügen, sie extern machen und Definitionen in eine .c oder .m-Datei verschieben.

Von diesem

myfunctions.h

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

Move to this:

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 aber warum die Funktion Erklärung extern machen? – MByD

+0

@BinyaminSharet Sie haben Recht, ich vergesse, dass "extern" ist völlig optional auf Erklärungen :) – dasblinkenlight

+0

Genau das, was ich wissen musste. Vielen Dank! – daveMac

Verwandte Themen