Wie schon so oft: << überladen



  • Ich hab mich mal durchs Forum geklickt um rauszufinden wie das geht. Dadurch konnte ich jetzt schon einige Fehler eliminieren. Trotzdem kommt noch ein Fehler.

    Ich habe eine Klasse für 3-dimensionale Punkte geschrieben. Die Überladung des <<-Operators mache ich dann in der Datei Point3D.cpp folgendermaßen:

    std::ostream& operator << (std::ostream& out_file, const Point3D& number) {
                    out_file << "(" << number.getX() << ";" << number.getY() << ";" << number.getZ() << ")";
                    return out_file;
                    }
    

    Meine Ausgabe in der main ist dann folgendermaßen:

    Point3D Punkt;
    cout<<Punkt;
    

    Als Fehler kommt dann:
    multiple definition of `operator<<(std::ostream&, Point3D const&)'
    first defined here
    ld returned 1 exit status

    Dabei gibt es aber keine Zeilenangabe oder ähnliches. Ich werde daraus echt nicht schlau.
    Könnte mir vielleicht jemand helfen was ich da falsch mache?

    Danke schonmal im voraus.



  • Ich schätze mal du hast den geposteten Code an 2 verschiedenen
    Stellen inkludiert, dann weiß er beim Linken nicht, welche (auch wenn sie
    identisch sind) er nehmen soll.



  • Ich hatte die Headerdatei sowohl in der Point3D.cpp als auch in der main-Datei includiert (welche ja auch wieder die Point3D.cpp als includiert hat). Aber wenn ich das ändere kommt noch immer der Fehler. Ansonsten habe ich nichts doppelt includiert.
    Wenn ich den Code in die main-Datei schreibe funktioniert es. Ich würde es aber gerne in der Definitionsdatei belassen, da noch andere Definitionen hinzukommen, die ich gerne übersichtlich in einer Datei hätte. Was könnte daran nun falsch sein?



  • Anfänger2 schrieb:

    Ich hatte die Headerdatei sowohl in der Point3D.cpp als auch in der main-Datei includiert (welche ja auch wieder die Point3D.cpp als includiert hat).

    versteh ich dich richtig das du in der main.cpp die Point3D.cpp includiert hast ?

    Meep Meep



  • Ja, ist das falsch?



  • Anfänger2 schrieb:

    Ja, ist das falsch?

    jups. header-files werden includiert. cpp werden gelinkt.



  • Ohh, dummer Fehler. Danke!



  • du könntest operator<< auch im header lassen und inline machen, wenn du die one definition rule nicht verletzten willst. siehe dazu auch die C++ FAQ


Anmelden zum Antworten