2013-03-03 4 views
6

Ich habe eine Konstante mit dem Namen "ID_KEY", die am Anfang von 3 separaten .m-Dateien deklariert wird, von denen keine die anderen Dateien enthält.Linker-Fehler bei gleichnamigen Konstanten in verschiedenen Bereichen

Die Erklärung ist wie folgt:

#import "PublicGamesResponse.h" 

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

Und in ähnlicher Weise für die beiden anderen Klassen. Jedoch bekomme ich einen Linkerfehler, der sich über mehrere Definitionen desselben Namens beschwert (Wenn ich zwei der Definitionen auskommentieren sollte, geht das weg).

Meine Frage ist, warum auf der Erde ist der Linker beschweren sich darüber? Jede Definition von ID_KEY liegt außerhalb des Bereichs aller anderen, daher sehe ich nicht, warum der Linker sich beschweren würde.

Als Haftungsausschluss habe ich das Projekt gereinigt und xCode neu gestartet, und auf der Website nach ähnlichen Fragen gesucht, aber hatte kein Glück.

Antwort

12

Wenn Sie Variablen oder Konstanten außerhalb einer Funktion definieren, werden sie im globalen Bereich abgelegt. Der Linker löst globale Referenzen auf und beschwert sich, wenn er denselben Namen mehr als einmal findet.

auf die Konstanten einen Rahmen ihrer Übersetzungseinheit geben (dh die Datei, in der sie definiert sind) in static vor ihren Definitionen:

static NSString *const ID_KEY = @"id"; 

Auf diese Weise werden alle Funktionen und Methoden innerhalb derselben Datei haben Zugriff auf ID_KEY, aber der Name würde im Bereich der Datei bleiben. Im Wesentlichen "verbirgt" static den Namen des Linkers.

Verwandte Themen