クラスの<<
演算子をオーバーライドしようとしています。目的は基本的に私のクラスのためにのような振る舞いを実装することです、それでそれをcout
に送ることは有用な出力を生成します。ダミーの例を使って、私は以下のコードを持っています。私がコンパイルしようとすると、ぼんやりとしたエラーが表示されます。C++演算子の複数の定義<<
$ 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
なぜこのようなことが起こっているのかわかりません。私のコードは以下の通りです:
Rectangle.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;
}
*:* 'CRectangle'と'過負荷<< 'における上記別のクラス定義が存在する場合'CRectangle'の' << 'を使用すると問題が発生します。 CRectangleの宣言をしても!どんな考え? – Paschalis