2 Stimmen

Doppeltes Symbol zum Zeitpunkt der Verknüpfung

Nur als Hintergrundinformation, es gibt keine Kompilierzeitfehler oder Warnungen im Projekt "Project".

Es gibt zahlreiche Fälle, in denen derselbe Name einer Instanzvariablen in zwei (oder mehr) Klassen verwendet wird. Im Folgenden werde ich den Variablennamen "index" als Beispiel verwenden. Sie kommt als Instanzvariable in Klasse1 und Klasse2 vor. Die Variable hat in beiden Klassen unterschiedliche, aber ähnliche Bedeutungen, daher die Verwendung des gemeinsamen Begriffs.

Ich definiere den Index in der Header-Datei sowohl für class1 als auch für class2, zum Beispiel:

@Interface class1 : NSObject { int index; } ...

Wiederholen Sie dies für Klasse 2.

Wenn ich das Projekt erstelle, meldet Xcode:

Doppeltes Symbol _index in /Project/build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class1.o und /Project/build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class2.o

Wenn Sie die Vorkommen von "index" in "indexnotverycommon" ändern, wird der gleiche Fehler mit dem neuen Namen gemeldet.

Wenn Sie die Vorkommen in "index1" und "index2" ändern, wird der Fehler behoben. Xcode meldet dann das nächste Duplikat, das es beim Verknüpfen findet, und so weiter, und so weiter.

Ich kann den Umbenennungsprozess fortsetzen, obwohl ich das lieber nicht tun würde, da ich befürchte, dass ein eher pathologisches Problem zugrunde liegt.

Für jeden Rat oder jede Frage bin ich dankbar.

2voto

diciu Punkte 28693

Index ist ebenfalls eine C-Funktion und daher ein sehr unglücklicher Name in Objective-C. Diese Artikel beschreibt, warum es keine gute Idee ist, einen Index als Namen zu verwenden.

Ich bin mir allerdings nicht sicher, warum Sie doppelte Symbole erhalten.

0voto

McPragma Punkte 91

Ich habe es herausgefunden, mit der Xcode finden-in-Projekt-Funktion. Vielen Dank für die Beratung über Index.

0voto

Jim Leask Punkte 1

Der Tipp zur Überprüfung auf eine #import "Xxx.m" anstelle der korrekten .h funktioniert.

Eine schnelle arbeitsbereichsweite Suche nach "Xxx.m" entdeckte den Fehler in der include die den Verbindungsfehler verursachte.

0voto

Rachel Henderson Punkte 629

Keine #include- oder #import-.m-Dateien einfügen. Fügen Sie diese .m-Dateien einfach in die Target | Build Phases ein. Fügen Sie keine .h-Dateien in Build-Phasen ein, sondern #importieren Sie .h-Dateien, wo immer Sie diese Funktionen benötigen.

Der Compiler weiß, dass es sich nur um eine Header-Datei "zu Informationszwecken" handelt und dass die Körper der Funktionen verfügbar sein werden, wenn er die .m-Dateien kompiliert und sie alle in eine ausführbare Datei packt

Die Header-Datei enthält nur Vorwärtsdeklarationen. Der Compiler weiß, dass der Body entweder in einer anderen Datei definiert ist oder sich in einer mit dem Projekt verlinkten Lib befindet

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X