Ich deklariere ein Array von NSString * in einer Header-Datei einer Klasse.
PolygonShape.hFehler und Warnungen in Xcode beim Deklarieren von Array von NSString * als globale externe
NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon", ...};
Jetzt habe ich dies in PolyginShape.m bin mit wie folgt:
- (NSString*) name {
return (POLYGON_NAMES [self.numberOfSides]);
}
NumberOfSides ist ein iVar, die den Index, bei dem der Polygonnamen gespeichert anzeigt wird
So weit so gut ... es war kompilieren ohne Fehler
Dann habe ich PolygonShape.h in meiner Datei hinzugefügt, die Hauptmethode implementiert (Hinweis: diese hat keine Klassendefinition und Call-Funktionen C-Style eher als obj-c Nun Stil)
#import "PolygonShape.h"
wenn ich kompilieren, bin ich ein Build (Verlinken) Fehler immer
ld: duplicate symbol _POLYGON_NAMES in /Users/../Projects/CS193P/1B/What_A_Tool/build/What_A_Tool.build/Debug/What_A_Tool.build/Objects-normal/i386/PolygonShape.o and /Users/../Projects/CS193P/1B/What_A_Tool/build/What_A_Tool.build/Debug/What_A_Tool.build/Objects-normal/i386/What_A_Tool.o
collect2: ld returned 1 exit status
war Also ging ich durch Stapelüberlauf und anderen Foren und vor allem die Beratung zu machen die globale Variable extern und so habe ich ...
extern NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon" .. };
jedoch habe ich immer noch die Verknüpfung Störung erhalte und auch 2 Warnungen bekommen nun sagt, dass
warning: 'POLYGON_NAMES' initialized and declared 'extern'
an beiden Orten, an denen ich PolygonShape.h am Import
Was soll ich hier fehlt?
Danke.
Nun, in diesem Fall wird nicht die "user" von der Klasse nicht bewusst sein, was das Array POLYGON_NAMES [] hält, nur durch Blick auf den Header? Dies soll eine Variable auf Klassenebene (statisch in Java/C++ - Begriffen) sein, also sollte sie nicht für den Benutzer in der Header-Datei selbst verfügbar sein? – Dev
Es gibt keine Möglichkeit, das Array mit seinem Inhalt in der Header-Datei in C/C++/Objective C zu deklarieren. Dmercredi ist korrekt, Sie müssen die Existenz (mit extern) des Arrays in der Header-Datei und das tatsächliche Array deklarieren in der Umsetzung. Andernfalls würde das Array einmal für jedes Mal deklariert werden, wenn der Header enthalten ist (daher der ursprüngliche doppelte Deklarationsfehler, der aufgetreten ist). Wenn Sie "extern" sagen, bedeutet das, dass Sie das Array deklarieren, aber nicht definieren, daher macht es auch keinen Sinn, es zu initialisieren, daher die Warnungen, die Sie bei Ihrem zweiten Versuch erlitten haben. –
Dank dmercredi und Peter – Dev