multiple definition of operator<<
lima-city → Forum → Programmiersprachen → C/C++ und D
code
dank
datei
definition
double
faktor
fehler
fehlermeldung
first
funktion
header
komplex double
komplex operator
komplexe zahlen
komplexen zahl
multiple definition
operator
quellcode
real double
reale teil
-
Ich habe eine Klasse für komplexe Zahlen erstellt und eine main-Klasse geschrieben, die diese testet. Alles lässt sich wunderbar kompilieren, aber wenn ich den header von komplex include bekomme ich beim linken die Fehlermeldung
komplex.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, komplex const&)': /LearnCpp/komplex.h:28: multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, komplex const&)' testrechner.o:/LearnCpp/komplex.h:28: first defined here collect2: ld returned 1 exit status
Der Header sieht folgendermassen aus:
#ifndef _KOMPLEX_H #define _KOMPLEX_H #include <iostream> class komplex { private: public: double md_real, //Der Reale Teil der komplexen Zahl md_i; //Der imaginäre Teil der komplexen Zahl komplex(double const& real, double const& i); komplex(komplex const& original); //Kopierkonstruktor komplex operator+(komplex const& summand); komplex operator-(komplex const& subtrahend); komplex operator*(komplex const& faktor); komplex operator/(komplex const& divisor); }; //operator << für komplex std::ostream& operator<<(std::ostream& vcAusgabe, komplex const& cZahl) { vcAusgabe << "("; vcAusgabe << (cZahl.md_real); vcAusgabe << " + "; vcAusgabe << (cZahl.md_i); vcAusgabe << "i)"; return vcAusgabe; }; #endif /* _KOMPLEX_H */
Kann mir irgendjemand sagen, wo mein Fehler liegt? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ganz einfach, wenn man es einmal erlebt hat.^^
Dein Problem ist, dass du eine Objectdatei komplex.o kompiliert hast, die dementsprechend die Funktion für den << Operator enthält.
Dazu bindest du allerdings auch noch die Headerdatei in deine Andere Datei ein, womit die Definition dort auch nochmal steht.
Letztlich führt das dazu, dass beim Linken sowohl die komplex.o als auch deine andere Datei diese Funktion enthalten.
Die Lösung sollte sein, dass der Quellcode der operator<< Funktion in die komplex.cpp verschoben wird und in der .h Datei nurnoch der Funktionskopf vordefiniert wird.
Ich bin mir damit jetzt nicht hundertprozentig sicher aber ich denke, dass dies der Fehler ist. -
Jep, das wars. Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage