निम्नलिखित कोड जीसीसी में संकलन नहीं करता है:C++ और इंजेक्शन आधार नाम
namespace One{
class A{
};
};
namespace Two{
class A{
public:
void what(){
cout << "Two::A says what!" << endl;
}
};
class B : public One::A{
public:
B(){
A xx;
xx.what();
}
};
};
और यह देता है:
gccbug.cpp: In constructor ‘Two::B::B()’:
gccbug.cpp:23: error: ‘class One::A’ has no member named ‘what’
अब, मुझे बताया गया था कि यह सही व्यवहार (इंजेक्शन आधार की वजह से है वन :: ए बनाने का नाम ए :: ए का संदर्भ लें। हालांकि, यह कोड सी # में संकलित है (ठीक है, कुछ चीजों को बदलने के बाद), इसलिए यह सी ++ विशिष्ट प्रतीत होता है।
मैं क्या सोच रहा हूं .. क्यों? क्या आधार नाम "वन :: ए" को "ए" के रूप में इंजेक्शन देने का कोई विशिष्ट उद्देश्य है?
बस संदर्भ के लिए, सी #! = सी ++। मुझे यकीन नहीं है कि आप दो –
की तुलना क्यों कर रहे हैं, मैं निश्चित रूप से नहीं कह सकता (मेरे पास अभी मेरी प्रतिलिपि नहीं है), लेकिन एक तरफ के रूप में, सी ++ भाषा को इस तरह से डिजाइन क्यों किया गया था इसके बारे में प्रश्न स्ट्रॉस्ट्रप द्वारा "द डिज़ाइन एंड इवोल्यूशन ऑफ सी ++" नामक पुस्तक में अक्सर उत्तर दिया जाता था। –
@ टोनी थेलियन, ठीक है, यह दूसरी सी-जैसी प्रोग्रामिंग भाषा है जिसमें "नेमस्पेस" है, और एक जिसे मैंने एक कंपाइलर तक पहुंचाया था। मैं यह नहीं कह रहा हूं कि केवल "एक सच्चा तरीका" है जिसमें यह सही है, लेकिन यह कम से कम इस उदाहरण को देखते हुए अंतर्ज्ञानी प्रतीत नहीं हुआ। – kamziro