Heim > Artikel > Backend-Entwicklung > Warum führt das Überladen von Operatoren in einer Header-Datei zu mehreren Definitionsfehlern?
Mehrfache Definition der Operatorüberladung in der Header-Datei
Im bereitgestellten Codebeispiel stößt der Compiler auf einen Mehrfachdefinitionsfehler für den Operator<< ; Überladung für die Complex-Klasse. Trotz des Schutzes der Header-Datei durch Präprozessor-Schutzvorrichtungen tritt dieser Fehler aufgrund der Definition des Operators << auf. Funktion, die im Header platziert wird.
Konkret handelt es sich bei der Zeile std::ostream& Operator<<(std::ostream& o, const Complex& Cplx) in der Header-Datei nicht um eine Deklaration, sondern eher um eine Definition. Wenn sowohl complex.cpp als auch main.cpp die Header-Datei enthalten, erkennt der Compiler daher doppelte Definitionen des Operators << Funktion während der Verknüpfung.
Im Gegensatz zur real()-Memberfunktion, die implizit inline ist und daher nicht anfällig für mehrere Definitionsfehler ist, ist der Operator<< Überladung ist explizit in der Header-Datei definiert. Daher muss es explizit mit dem Schlüsselwort inline als inline markiert werden, um mehrere Definitionen zu ermöglichen.
inline std::ostream& operator<<(std::ostream& o, const Complex& Cplx) { return o << Cplx.m_Real << " i" << Cplx.m_Imaginary; }
Alternativ kann die Definition des Operators<< Überladung kann in die Quelldatei complex.cpp verschoben werden, um den Fehler bei mehreren Definitionen zu verhindern. Durch die Trennung von Deklaration und Definition kann der Compiler den Verweis auf den Operator << korrekt verarbeiten. Funktion in main.cpp, ohne auf mehrere Definitionen zu stoßen.
Das obige ist der detaillierte Inhalt vonWarum führt das Überladen von Operatoren in einer Header-Datei zu mehreren Definitionsfehlern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!