Heim > Backend-Entwicklung > C++ > Hauptteil

Warum gibt mein C-Code einen Fehler „Mehrere Definitionen' aus?

Linda Hamilton
Freigeben: 2024-11-20 04:32:02
Original
433 Leute haben es durchsucht

Why Does My C   Code Throw a “Multiple Definition” Error?

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:

  • Eine Header-Datei sowohl in einer Quelldatei als auch in der entsprechenden Header-Datei enthalten ist.
  • Eine Definition wird in einer Header-Datei anstelle einer Deklaration bereitgestellt.

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&);
Nach dem Login kopieren

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:

  • Verwendung das Schlüsselwort „inline“: Indem Sie die Funktion als inline deklarieren, ermöglichen Sie mehreren Übersetzungseinheiten, die Definition bereitzustellen, ohne einen Konflikt zu verursachen. Allerdings weisen Inline-Funktionen einige Einschränkungen auf, wie z. B. Auswirkungen auf die Leistung großer Funktionen.
  • Definition in Quelldatei verschieben: Anstatt den Operator << Verschieben Sie es in der Header-Datei in die entsprechende Quelldatei (complex.cpp). Dadurch wird sichergestellt, dass die Definition nur in einer Übersetzungseinheit vorhanden ist.

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 ist

Das 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage