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?

War es hilfreich?

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'. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top