जब मैं कोड निम्नलिखित लिखने यह संकलित हो जाता है और ठीक से मार डाला:वैश्विक दायरे और स्थानीय दायरे में निर्देश का उपयोग क्यों अलग-अलग व्यवहार करते हैं?
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
int y = 10;
}
namespace second
{
double x = 3.1416;
double y = 2.7183;
}
int main() {
using namespace first; //using derective
using second::y;
cout << x << endl;
cout << y << endl;
return 0;
}
लेकिन अगर मैं इस प्रकार मुख्य कार्य के बाहर निर्देशों का उपयोग कर लिखते हैं,
using namespace first; //using derective
using second::y;
int main() {
cout << x << endl;
cout << y << endl;
return 0;
}
यह इस संकलन त्रुटि देता है:
g++ namespace03.cpp -o namespace03
namespace03.cpp: In function ‘int main()’:
namespace03.cpp:20:11: error: reference to ‘y’ is ambiguous
namespace03.cpp:13:10: error: candidates are: double second::y
namespace03.cpp:7:7: error: int first::y
make: *** [namespace03] Error 1
क्या कोई यह बता सकता है कि main
के अंदर औरके अंदर उपयोग किए जाने पर निर्देश का उपयोग क्यों अलग-अलग व्यवहार करता है?
त्वरित उत्तर के लिए जेसी धन्यवाद ... अगर मैं गलत हूं तो कृपया मुझे सही करें ... लेकिन जब निर्देशों का उपयोग मुख्य कार्य में होता है तब भी वाई की 2 घोषणाएं होने वाली हैं। यदि ऐसा है तो संकलक केवल दूसरे मामले में समस्या क्यों देता है? – Amrit
@ user2235938: 'y' की दो घोषणाएं हैं, लेकिन उपयोग-घोषणा मुख्य के अंदर' second :: y' घोषित करती है, जबकि 'प्रथम :: y' को वैश्विक नामस्थान क्षेत्र में घोषित किया जाता है। चूंकि मुख्य के अंदर 'second :: y' घोषित किया गया है, यह 'पहले :: y' छुपाता है। क्या आप नाम छिपाने से परिचित हैं? –
क्षमा करें जेसी ... लेकिन मैं समझने में सक्षम नहीं हूं। जब दोनों कथन "नामस्थान का उपयोग करते हुए पहले; दूसरे :: y का उपयोग करते हुए;" मुख्य कार्य के अंदर हैं, इसे स्थानीय क्षेत्र में पहले :: y और second :: y दोनों घोषित करना चाहिए और संकलन त्रुटि देना चाहिए। लेकिन यह प्रोग्राम और संकलित नहीं करता है और सफलतापूर्वक चलता है। और जब दोनों कथन मुख्य रूप से बाहर होते हैं तो यह अस्पष्टता के कारण भी संकलित नहीं होता है। कृपया समझाएं ... – Amrit