2012-05-05 13 views
9

Po pierwsze, w moim programowaniu używałem tylko metod Objective-c. Postanowiłem wykonać kilka szybkich obliczeń matematycznych jako funkcje c, a następnie skończyłem je wymagając dla wielu klas. Tak więc utknąłem funkcje c w osobnym pliku .h. Działa to dobrze, dopóki nie spróbuję zaimportować pliku .h do więcej niż jednej klasy. Następnie pojawia się ten błąd:Powielony błąd symbolu z funkcji C w Objective-C

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

Jak mogę użyć funkcji c w więcej niż jednej klasie bez tego błędu łącza. Próbowałem już tylko zdefiniować funkcje w klasach, których potrzebuję, ale wydaje się, że nawet jeśli są to różne klasy, pojawia się ten błąd, jeśli nazwa funkcji jest taka sama. Prawdopodobnie jestem tu szalony, ale niektóre pomagają w zrozumieniu.

Odpowiedz

14

Powinieneś umieścić deklaracje w pliku .h, uczynić je zewnętrznymi i przenieść definicje do pliku .c lub .m.

Od tego

myfunctions.h

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

Move to:

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, ale dlaczego warto deklarować funkcję na zewnątrz? – MByD

+0

@ BinyaminSharet Masz rację, ciągle zapominam, że 'extern' jest całkowicie opcjonalny na deklaracjach :) – dasblinkenlight

+0

Właśnie to, co potrzebowałem wiedzieć. Dzięki! – daveMac

Powiązane problemy