विभिन्न compilers पर निम्न कोड को संकलित करने की कोशिश कर रहा मुझे दो अलग-अलग परिणाम देता है:क्या किसी वर्ग के सदस्य को अपना नाम (अन्य वर्ग) के समान नाम दिया जा सकता है?
struct S{};
struct T{S S;};
int main(){}
आप देख सकते हैं, T
अंदर, मैं एक वस्तु पहले से परिभाषित वर्ग S
रूप में एक ही नाम पर रखा गया है।
जीसीसी 4.7.2 पर, I get the following errorT
अंदर S S;
घोषणा से संबंधित:
error: declaration of 'S T::S' [-fpermissive]
error: changes meaning of 'S' from 'struct S' [-fpermissive]
हालांकि, वर्ग के बाहर ले जाकर (या main
में) works fine:
struct S{};
S S;
int main(){}
यह मुझे क्या त्रुटि दे रहा है इसका मतलब क्या है?
विजुअल स्टूडियो 2012 में, पूरी चीज किसी भी त्रुटि के बिना संकलित और चलाती है। इसे this Clang 3.0 compiler में पेस्ट करने से मुझे कोई त्रुटि नहीं मिलती है।
कौन सा सही है? क्या मैं वास्तव में ऐसा कर सकता हूं या नहीं?
आह, मैं देखता हूं - मैं निदान को गलत तरीके से पढ़ता हूं। – ildjarn
@ildjarn, यह एक अजीब झंडा है। ऐसा लगता है कि रिवर्स में काम करता है। आम तौर पर, चेतावनी के लिए ज़िम्मेदार ध्वज स्क्वायर ब्रैकेट में दिखाई देता है। – chris
बस मत करो। क्या बात है? भ्रमित? ध्यान दें कि ऐसा करने के बाद, अब आप नामस्थानों में स्पष्ट रूप से योग्यता के बिना सदस्य कार्यों में 'S' प्रकार का उल्लेख नहीं कर सकते हैं ... –