Heim >Backend-Entwicklung >C++ >Warum erhalte ich „Multiple Definition'-Fehler in Header-Dateien und wie kann ich diese beheben?
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>
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!