एक परियोजना में मैं काम कर रहा हूं, मेरे पास Score
वर्ग है, जो score.h
में नीचे परिभाषित है। मैं इसे अधिभारित करने की कोशिश कर रहा हूं, जब <<
ऑपरेशन उस पर किया जाता है, _points + " " + _name
मुद्रित होता है।'दोस्त' फ़ंक्शन और << ऑपरेटर ओवरलोडिंग: कक्षा के लिए ऑपरेटर को अधिभारित करने का उचित तरीका क्या है?
ostream & Score::operator<< (ostream & os, Score right)
{
os << right.getPoints() << " " << right.scoreGetName();
return os;
}
यहाँ त्रुटियों लौटे हैं::
score.h(30) : error C2804: binary 'operator <<' has too many parameters
(यह त्रुटि दिखाई 4 बार, वास्तव में)
मैं यह काम कर रहा करने के लिए प्रबंधित
यहाँ मैं करने की कोशिश की क्या है एक दोस्त समारोह के रूप में ओवरलोड को घोषित करके:
friend ostream & operator<< (ostream & os, Score right);
और स्कोर.cpp में फ़ंक्शन घोषणा से Score::
को हटा रहा है (प्रभावी रूप से इसे सदस्य के रूप में घोषित नहीं किया गया है)।
यह क्यों काम करता है, फिर भी कोड का पूर्व टुकड़ा नहीं है?
आपके समय के लिए धन्यवाद!
संपादित
मैं नष्ट कर दिया सभी हेडर फाइल पर अधिभार को उल्लेख है ... फिर भी मैं निम्नलिखित (और केवल) त्रुटि मिलती है। binary '<<' : no operator found which takes a right-hand operand of type 'Score' (or there is no acceptable conversion)
मेरे परीक्षण, मुख्य() में, कैसे उचित अधिभार नहीं मिल सकता है? (यह भी शामिल है नहीं, मैं जाँच की)
नीचे पूर्ण score.h
#ifndef SCORE_H_
#define SCORE_H_
#include <string>
#include <iostream>
#include <iostream>
using std::string;
using std::ostream;
class Score
{
public:
Score(string name);
Score();
virtual ~Score();
void addPoints(int n);
string scoreGetName() const;
int getPoints() const;
void scoreSetName(string name);
bool operator>(const Score right) const;
private:
string _name;
int _points;
};
#endif
अच्छा, पूरा जवाब। –
कक्षा 'निजी भागों - रावर तक पहुंचें। जे/के, बहुत बहुत धन्यवाद, फिर भी एक प्रश्न बनी हुई है: मैंने हेडर फ़ाइल पर अधिभार के सभी उल्लेख हटा दिए हैं ... फिर भी मुझे निम्न (और केवल) त्रुटि मिलती है। 'बाइनरी '<<': कोई ऑपरेटर नहीं मिला जो 'स्कोर' (या कोई स्वीकार्य रूपांतरण नहीं है) का दायां हाथ ऑपरेंड लेता है) मेरा परीक्षण, मुख्य() में कैसे उपयुक्त है, उचित नहीं मिल सकता अधिभार? (इसमें शामिल नहीं है)। –
आपको अपनी कक्षा की परिभाषा के साथ 'ऑपरेटर <<' दाएं घोषित करना चाहिए: वह एक ही शीर्षलेख में और उसी नामस्थान में है। इस तरह आप इसे शामिल करना नहीं भूलेंगे और आप संकलक अधिभार की तलाश करते समय इसे संकलक चुनने में सक्षम होंगे। –