सब ठीक था जब तक कि मैंने अपनी ऑब्जेक्ट्स को नामस्थान में स्थानांतरित नहीं किया। और अब संकलक का दावा है कि मेरे रंग गुण निजी हैं।सी ++ - ओस्ट्रीम, दोस्तों और नामस्थान
मैंने सोचा कि दोस्तों का पूरा बिंदु कक्षा वर्गों के साथ encapsulated जानकारी साझा करना था।
Color.h
friend ostream & operator << (ostream& output, const st::Color& color);
Color.cpp:
ostream & operator <<(ostream& output, const st::Color& color) {
output << "Colors:\nalpha\t: " << color.a << "\nred\t: " << color.r << "\ngreen\t: " << color.g
<< "\nblue\t: " << color.b << "\nvalue\t: " << color.color();
return output;
}
त्रुटि:
Color.h||In function 'std::ostream& operator<<(std::ostream&, const st::Color&)':|
Color.h|52|error: 'unsigned char st::Color::a' is private|
Color.cpp|15|error: within this context|
Color.h|49|error: 'unsigned char st::Color::r' is private|
Color.cpp|15|error: within this context|
Color.h|51|error: 'unsigned char st::Color::g' is private|
Color.cpp|15|error: within this context|
Color.h|50|error: 'unsigned char st::Color::b' is private|
Color.cpp|16|error: within this context|
||=== Build finished: 8 errors, 0 warnings (0 minutes, 1 seconds) ===|
तो सौदा क्या है? मैं अपने आईडीई के रूप में कोड :: ब्लॉक का उपयोग कर रहा हूं। और जब मैं "रंग" पैरामीटर पर डॉट ऑपरेटर का उपयोग करता हूं तो यह किसी भी गुण या विधियों को भी नहीं दिखाएगा। यह स्पष्ट रूप से कुछ गलत होने का संकेत है ... कहीं।
मैंने मित्र ऑपरेटर को अधिभारित कर लिया है और यह ठीक है। कहीं और त्रुटि नहीं है। क्या देता है?
यह इस प्रकार के रूप में घोषित किया गया:
namespace st{
class Color {
friend ostream & operator << (ostream& output, const st::Color& color);
public:
....
private:
.....
};
};
संपादित करें:
मेरी सीपीपी में अब मेरे द्वारा की गई इस:
namespace st{
ostream & st::operator <<(ostream& output, const st::Color& color) {
output << "Colors:\nalpha\t: " << color.a << "\nred\t: " << color.r << "\ngreen\t: " << color.g
<< "\nblue\t: " << color.b << "\nvalue\t: " << color.color();
return output;
}
}
st::Color::Color() {
reset();
}
st::Color::Color(const Color& orig) {
a = orig.a;
r = orig.r;
g = orig.g;
b = orig.b;
}
void st::Color::reset() {
a = 0;
r = 0;
g = 0;
b = 0;
}
... etc
}
कोई त्रुटि नहीं संकलन, लेकिन यह एक ऐसी के लिए सामान्य है शीर्षलेख में नामस्थान का फिर से उपयोग करने की स्थिति? या यह पूरी तरह से बंद है जो मुझे करना चाहिए?
संपादित करें: @Rob आपके इनपुट के लिए भी धन्यवाद!
आप "एक नाम स्थान के लिए अपने वस्तुओं ले जाया गया" से क्या मतलब है? – jedwards
किसी ऑब्जेक्ट के बीच ऑब्जेक्ट को स्थानांतरित करना। आईई नेमस्पेस सेंट {वर्ग ...} – Sidar
'ऑपरेटर <<' की परिभाषा में नामस्थान का फिर से उपयोग न करें। यह जरूरी नहीं होना चाहिए। – pmr