2012-04-06 5 views
3

Ich habe zwei Klassen mit Konstanten.Verwenden Sie Konstanten in objective-c. Doppelte Symbolprobleme

Zum Beispiel gibt es eine Klasse class_a.m enthalten eine Konstante kWidth = 150,

auch habe ich eine Klasse namens class_b.m caontain einer konstanten kWidth = 200

Nach betreibe mein Projekt ich rief ein Fehler mit doppeltem Symbol, aber diese Dateien sind nicht verschachtelt (ich meine class_a in class_b oder class_b in class_a). Auch ich benutze nur diese Constantin-Implementierung.

Quelle:

const int kWidht = 150; 

Fehlerbeschreibung:

ld: duplicate symbol _kWidht... 

Dank für die Hilfe!

+1

Bitte geben Sie Ihren Code ein. Wie werden die Variablen deklariert? 'statisch'? – pgb

+0

danke für die Antwort! Ich aktualisiere meine Frage. Bitte sehen Sie es, danke! –

+0

ja ich brauche statische verwenden, danke! –

Antwort

14

Wenn die Konstante nur innerhalb dieser einzelnen Implementierungsdatei verwendet wird, sollten Sie ihre Deklaration mit static voranstellen. Das heißt, dreht diese:

const int kWidth = 150; 

in dieser:

static const int kWidth = 150; 

Das static Schlüsselwort teilt den Compiler mit, dass dieses Symbol nur in der aktuellen Datei verwendet wird. Ohne ihn nimmt der Compiler an, dass Sie eine globale Variable deklarieren, auf die von überall in der endgültigen Anwendung zugegriffen werden kann. Das Deklarieren von zwei globalen Variablen mit demselben Namen ist keine gute Idee, da Sie keine Möglichkeit haben würden, zwischen ihnen zu unterscheiden. Daher beschwert sich der Compiler zu Recht. Zum Glück ist es einfach, dies zu beheben, indem Sie Ihre Absichten über das Schlüsselwort static deutlicher machen.


1: Genauer gesagt "Übersetzungseinheit", aber "Datei" ist gut genug für die Zwecke dieser Frage.

1

Eine andere Möglichkeit zur Umgehung dieser Situation besteht darin, alle Konstanten in einer Klasse zu sammeln. Auf diese Weise haben Sie einen besseren Überblick über alle Konstantennamen. Der Nachteil ist, dass diese als globale Variablen angenommen werden können, was nicht immer gewürdigt wird.

Verwandte Themen