Fehler bei mehreren Definitionen: Eine Lösung für widersprüchliche Definitionen
In C, wenn Funktionen oder Klassen in Headern definiert und in Quelldateien implementiert werden, Entwickler können auf den Fehler „Mehrfachdefinition“ stoßen. Dieser Fehler tritt auf, wenn mehrere Übersetzungseinheiten (Quelldateien) Definitionen für denselben Bezeichner enthalten.
Ursachen für Mehrfachdefinitionen
Der Fehler „Mehrfachdefinition“ tritt bei Headerdateien auf enthaltende Definitionen sind in mehreren Übersetzungseinheiten enthalten. Dies kann passieren, wenn:
Den Fehler verstehen
Betrachten Sie das bereitgestellte Codebeispiel:
// complex.h class Complex { public: friend std::ostream& operator<<(std::ostream&, const Complex&); }; // complex.cpp std::ostream& operator<<(std::ostream&, const Complex&);
In diesem Beispiel ist die Definition des Operators << ; ist in complex.h statt complex.cpp. Dies kann zu einem Mehrfachdefinitionsfehler führen, da sowohl main.cpp als auch complex.cpp versuchen, das << Operator für die Complex-Klasse.
Lösungen für Mehrfachdefinitionen
Die Lösungen für den Mehrfachdefinitionsfehler sind:
Die Verwendung des Inline-Schlüsselworts oder das Verschieben der Definition in die Quelldatei sind die bevorzugten Lösungen zur Vermeidung des Fehlers bei mehreren Definitionen.
Unterschied in der Handhabung von real() und <<
Im Codebeispiel ist die real()-Funktion in complex.h deklariert, aber nicht definiert. Aus diesem Grund meldet der Compiler dafür keinen Mehrfachdefinitionsfehler. In Klassendeklarationen deklarierte Mitgliedsfunktionen sind implizit inline, was bedeutet, dass ihre Definitionen in alle Übersetzungseinheiten eingefügt werden, die den Header enthalten. Dies ist für den Operator << nicht der Fall. Funktion, die in complex.h.
definiert istDas obige ist der detaillierte Inhalt vonWarum gibt mein C-Code einen Fehler „Mehrere Definitionen' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!