c ++ mehrere Definitionen des Operators <<

Ich versuche das zu überschreiben<< Operator für eine Klasse. Der Zweck ist im Grunde eine zu implementierentoString() wie Verhalten für meine Klasse, so dass es zu sendencout erzeugt nützliche Ergebnisse. Anhand eines Dummy-Beispiels habe ich den folgenden Code. Wenn ich versuche zu kompilieren, erhalte ich den folgenden Fehler:

$ g++ main.cpp Rectangle.cpp
/tmp/ccWs2n6V.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, CRectangle const&)':
Rectangle.cpp:(.text+0x0): multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, CRectangle const&)'
/tmp/ccLU2LLE.o:main.cpp:(.text+0x0): first defined here

Ich kann nicht herausfinden, warum das passiert. Mein Code ist unten:

Rechteck.h:

#include <iostream>
using namespace std;

class CRectangle {
    private:
        int x, y;
        friend ostream& operator<<(ostream& out, const CRectangle& r);
    public:
        void set_values (int,int);
        int area ();
};

ostream& operator<<(ostream& out, const CRectangle& r){
    return out << "Rectangle: " << r.x << ", " << r.y;
}

Rectangle.cpp:

#include "Rectangle.h"

using namespace std;

int CRectangle::area (){
    return x*y;
}

void CRectangle::set_values (int a, int b) {
    x = a;
    y = b;
}

main.cpp:

#include <iostream>
#include "Rectangle.h"

using namespace std;

int main () {
    CRectangle rect;
    rect.set_values (3,4);
    cout << "area: " << rect.area();
    return 0;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage