2013-03-03 11 views
6

Mam stałą o nazwie "ID_KEY", która jest zadeklarowana na górze 3 osobnych plików .m, z których żadne nie zawierają innych plików.Błąd łącznika na tych samych nazwanych stałych w różnych zakresach.

Deklaracja jest następujący:

#import "PublicGamesResponse.h" 

NSString *const ID_KEY = @"id"; 
... 
@implementation PublicGamesResponse 

i podobnie dla pozostałych dwóch klas. Jednak otrzymuję błąd linkera narzekający na wiele definicji o tej samej nazwie (gdybym miał skomentować dwie definicje, to znika).

Moje pytanie brzmi: dlaczego na ziemi linker narzeka na to? Każda definicja ID_KEY wykracza poza zakres wszystkich pozostałych, więc nie rozumiem, dlaczego linker narzeka.

Jako zrzeczenie się, wyczyściłem projekt i zrestartowałem xCode i szukałem podobnych pytań na stronie, ale nie miałem szczęścia.

Odpowiedz

12

Po zdefiniowaniu zmiennych lub stałych poza funkcją są one umieszczane w zasięgu globalnym . Linker rozwiązuje globalne odniesienia i narzeka, gdy znajdzie tę samą nazwę więcej niż raz.

otrzymując stałe zakres ich jednostki kompilacji (czyli plik, w którym są one określone) Dodać static przed ich definicje:

static NSString *const ID_KEY = @"id"; 

ten sposób wszystkie funkcje i metody wewnątrz samego pliku będzie mieć dostęp do ID_KEY, ale nazwa pozostanie w zakresie pliku. Zasadniczo, static "ukrywa" nazwę od linkera.

Powiązane problemy