und brauche dieses Array in l.cpp, tc, pp.c, aber ich erhalte diesen Fehler:
pp.o:(.data+0x0): multiple definition of `names'
l.o:(.data+0x0): first defined here
t.o:(.data+0x0): multiple definition of `names'
l.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
make: *** https://stackoverflow.com/questions/17764661/multiple-definition-of-linker-error Error 1
Ich habe Wachen in jedem enthalten *.h Datei, die ich in meinem Projekt verwende. Irgendwelche Hilfe bei der Lösung?
Mögliches Duplikat eines Linkerfehlers mit mehreren Definitionen nach dem Hinzufügen einer Funktion zu einer zuvor verknüpften Datei
– Benutzer529758
20. Juli 2013 um 18:36 Uhr
Gibt es eine kürzliche Änderung in Debian? Bis vor ein paar Tagen wurde mein Projekt gut kompiliert…. Ich fing an, diesen Fehler zu bekommen (sogar für Revisionen, die ich markiert habe und die vor ein paar Tagen gut funktionierten) nach den letzten Updates (ich bin beim Debian-Testen).
– eftshift0
15. August 2020 um 4:04 Uhr
Yu Hao
Definieren Sie keine Variablen in Headern. Legen Sie Deklarationen im Header und Definitionen in einer der .c-Dateien ab.
Wenn Sie eine Definition einer globalen Variablen in eine Headerdatei einfügen, wird diese Definition in jede .c-Datei eingefügt, die diesen Header enthält, und Sie erhalten einen Mehrfachdefinitionsfehler, da eine Variable möglicherweise mehrmals deklariert, aber nur einmal definiert werden kann .
Außerdem können Sie noch etwas tun, wenn Sie Ihre Variablen in einer Header-Datei definieren müssen, die Sie verwenden können static Stichwort.
Dadurch variabel names wird in Ihrem gesamten Programm nur einmal definiert und kann mehrfach aufgerufen werden.
gelöst! 🙂 Könnten Sie mir bitte sagen, warum ich keine Deklarationen einfügen sollte h*. Dateien?
– Mazix
20. Juli 2013 um 17:30 Uhr
Also wird es das nicht tun. Verwenden Sie *.h-Dateien nur, um auf Informationen zu verweisen. Sie müssen sich daran erinnern, dass “include” bedeutet, dass alle *.h-Informationen in dieser Datei enthalten sind, sodass Sie diese Informationen (nicht nur die Referenz) in jede Datei kopieren würden, die die *.h verwendet. Dies kann Linker verwirren und tut es auch.
– Jiminion
20. Juli 2013 um 17:34 Uhr
@mazix Nein, die Definition einer globalen Variablen sollte in die .c-Datei gehen und die Erklärung in der Kopfzeile. Denken Sie daran, dass Sie eine Variable viele Male deklarieren, aber nur einmal definieren können.
– Yu Hao
20. Juli 2013 um 17:34 Uhr
Nur um die Erklärung etwas klarer zu machen, die Header-Datei ist wahrscheinlich in mehr als einer c-Datei enthalten, sodass Sie am Ende mehrere Deklarationen einer Variablen mit demselben Namen haben werden
– Spalter
20. Juli 2013 um 18:17 Uhr
ist es möglich zu verwenden extern für Klassenkonstruktor?
– Ebrahim Karimi
27. Oktober 2018 um 20:07 Uhr
Deklarationen öffentlicher Funktionen gehören in Header-Dateien, ja, aber Definitionen sind auch in Headern absolut gültig! Sie können die Definition als statisch deklarieren (nur 1 Kopie für das gesamte Programm erlaubt), wenn Sie Dinge in einem Header für Hilfsfunktionen definieren, die Sie nicht in jeder c-Datei erneut definieren müssen. IE definiert eine Aufzählung und eine statische Funktion, um die Aufzählung in eine Zeichenfolge zu übersetzen. Dann müssen Sie den Enum-zu-String-Übersetzer nicht für jede .c-Datei, die den Header enthält, neu schreiben. 🙂
Ich finde diese Antwort tatsächlich viel bequemer als die oberste Antwort. Es ist praktischer und ansprechender, nur einen Header zu haben, um beispielsweise alle globalen Variablen zu speichern, anstatt .h- und .cpp-Dateien zu haben. Vielen Dank.
– Sag
28. Mai 2017 um 2:25 Uhr
Ich denke auch, dass diese Lösung besser ist als die am meisten gewählte, weil die andere Werte in jeder *.c-Datei definieren muss, und außerdem sieht deine, @JonathanWhittenberg, eleganter aus. Danke vielmals
– Alejandro Galera
3. Mai 2018 um 8:59 Uhr
Bessere und elegantere Lösung als die AA. +1 für das Hinzufügen, warum es nicht immer eine schlechte Idee ist.
– SimonC
8. Januar 2019 um 16:16 Uhr
Dies ist keine genaue Beschreibung dessen, was Statik tut. “Sie können die Definition als statisch deklarieren (nur 1 Kopie für das gesamte Programm erlaubt)” NEIN! static legt die Definition auf diese Kompiliereinheit fest. Sie erhalten also eine Kopie prokompilierenEinheit. Wenn Sie also eine große Liste von Zeichenfolgen haben, wird Ihr Programm am Ende viele doppelte Kopien dieser Liste haben … eine für jede c-Datei. Dies ist noch schlimmer für statische Funktionen, wenn Sie diese später debuggen, da es nicht mehr eine einzelne Funktion gibt, auf der ein Haltepunkt platziert werden kann, sondern viele Kopien dieser Funktion im resultierenden verknüpften Programm.
– PPinguin
7. Juni 2019 um 23:20 Uhr
Machen Sie Ihre Definitionen in den Header-Dateien statisch.
Ihre Antwort könnte durch zusätzliche unterstützende Informationen verbessert werden. Bitte bearbeiten Sie, um weitere Details wie Zitate oder Dokumentation hinzuzufügen, damit andere bestätigen können, dass Ihre Antwort richtig ist. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe.
– Gemeinschaft bot
7. Februar um 12:10 Uhr
14174400cookie-checkMehrfachdefinition von … Linkerfehleryes
Mögliches Duplikat eines Linkerfehlers mit mehreren Definitionen nach dem Hinzufügen einer Funktion zu einer zuvor verknüpften Datei
– Benutzer529758
20. Juli 2013 um 18:36 Uhr
Gibt es eine kürzliche Änderung in Debian? Bis vor ein paar Tagen wurde mein Projekt gut kompiliert…. Ich fing an, diesen Fehler zu bekommen (sogar für Revisionen, die ich markiert habe und die vor ein paar Tagen gut funktionierten) nach den letzten Updates (ich bin beim Debian-Testen).
– eftshift0
15. August 2020 um 4:04 Uhr