kostenloser Webspace werbefrei: lima-city


multiple definition of operator<<

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    xilebo

    xilebo hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Autor dieses Themas

    xilebo

    xilebo hat kostenlosen Webspace.

    Jep, das wars. Danke!
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!