Heim >Backend-Entwicklung >C++ >Warum erhalte ich „Multiple Definition'-Fehler in Header-Dateien und wie kann ich diese beheben?

Warum erhalte ich „Multiple Definition'-Fehler in Header-Dateien und wie kann ich diese beheben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 06:31:14235Durchsuche

Why Do I Get

Mehrere Definitionsfehler in Header-Dateien: Warum und wie man sie behebt

Compiler stoßen auf „mehrere Definitionsfehler“, wenn ihnen mehrere angezeigt werden Definitionen eines Symbols im selben Programm. Dies kann auftreten, wenn mehrere Quelldateien dieselbe Header-Datei enthalten, die jeweils dasselbe Symbol definiert.

Sehen wir uns das bereitgestellte Codebeispiel an:

// complex.h
#include <iostream>

class Complex {
public:
   Complex(float Real, float Imaginary);
   float real() const { return m_Real; };
private:
   friend std::ostream& operator<p>Der Operator</p>
<pre class="brush:php;toolbar:false">// complex.cpp
#include "complex.h"
Complex::Complex(float Real, float Imaginary) {
   m_Real = Real;
   m_Imaginary = Imaginary;
}
// main.cpp
#include "complex.h"
#include <iostream>
int main() {
   Complex Foo(3.4, 4.5);
   std::cout <p>Beim Kompilieren dieses Codes stößt der Compiler auf einen Fehler „Mehrfachdefinition“. für den Betreiber</p>
<p><strong>Warum nicht für real()?</strong></p>
<p>Die Memberfunktion real() ist implizit inline, was bedeutet, dass der Compiler sie so behandelt, als ob sie inline deklariert wäre, obwohl es ist nicht explizit in der .h angegeben Datei.</p>
<p><strong>Lösungen</strong></p>
<p>Um das Problem der Mehrfachdefinition für den Operator zu lösen</p>
<p><strong>Inline der Funktion:</strong><br>Fügen Sie das Inline-Schlüsselwort zur Funktionsdefinition hinzu, um den Compiler anzuweisen, es zu inline:</p>
<pre class="brush:php;toolbar:false">inline std::ostream& operator<p><strong>Verschieben Sie die Definition in die .cpp-Datei:</strong><br>Entfernen Sie die Funktionsdefinition aus der .h-Datei und platzieren Sie es in der entsprechenden .cpp-Datei:</p><pre class="brush:php;toolbar:false">// complex.cpp
std::ostream& operator<p><strong>Andere Lösungen</strong></p><p>Zusätzliche Lösungen umfassen:</p>
  • Pragma einmal:Verwenden einer Präprozessoranweisung in der .h-Datei, um mehrere zu unterdrücken Einschlüsse.
  • Modulsystem: Verwendung eines Modulsystems (C 20 und höher) zur Handhabung von Abhängigkeiten zwischen Quelldateien.
  • Header-Schutz: Sicherstellen dass die .h-Datei ein eindeutiges Makro definiert, um mehrere Einschlüsse zu verhindern.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich „Multiple Definition'-Fehler in Header-Dateien und wie kann ich diese beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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