obj-c Symbol für Header-Variable duplizieren
-
19-09-2019 - |
Frage
Es war mein Eindruck, dass # Import mit nur einer Datei einmal pro Build importieren würde, aber nach dem Versuch, eine Variable in einem Header zu definieren, und dann diesen Header in zwei verschiedenen Quelldateien importieren, erhalte ich einen doppelten Symbol Linkerfehler für Die Variable. Wie ist das möglich?
Lösung
#import
macht Header einmal pro Datei aufgenommen werden , aber nicht pro Build. So Ihre Variable in jeder Datei definiert ist, wo Sie Ihre Header und als globale Variable importieren ist standardmäßig im gesamten Projekt sichtbar Sie Linker Fehler.
korrekte Art und Weise eine globale Variable zu definieren (wenn es ist, was Sie tun wollen) ist es in Implementierungsdatei definieren und mit dem Schlüsselwort extern in anderen Dateien verweisen.
auch Variable in Header als statisch definiert, wird seine Sicht auf die einzelne Datei begrenzen, so dass Sie keine Fehlermeldung erhalten, aber wahrscheinlich nicht das gewünschte Ergebnis;)
Andere Tipps
#import
stellt sicher, dass die ‚Erklärungen‘ nur einmal enthalten sind. Da Sie eine Variable definieren, die eine ‚Definition‘ ist, die Sie ein Duplikat Symbol Linker-Fehler erhalten werden.
Um diesen Fehler zu lösen - Verwendung .h für nur Erklärung und .m zur Definition
Wie Vladimir erklärt Sie können extern
Ich hatte ein paar doppelten Symbole plötzlich erscheinen, nachdem ich eine neue Klasse eingerichtet hatte.
Schließlich erkannte ich es geschafft hatte dies in der .m-Datei zu tun:
#import "other-file.m"
Beachten Sie den 'm'. :)