मैं कक्षा के लिए <<
ऑपरेटर को ओवरराइड करने का प्रयास कर रहा हूं। उद्देश्य मूल रूप से toString()
को मेरी कक्षा के व्यवहार की तरह लागू करने के लिए है, ताकि इसे cout
पर भेजकर उपयोगी आउटपुट उत्पन्न हो सके। एक डमी उदाहरण का उपयोग करके, मेरे पास नीचे कोड है। जब मैं संकलन करने का प्रयास करता हूं, तो मुझे foollowing त्रुटि मिलती है:सी ++ ऑपरेटर की कई परिभाषाएं <<
$ 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