मैं विजुअल स्टूडियो 2012 का उपयोग कर रहा हूं, और मुझे ऐसा कुछ मिला है जो अजीब तरह का है। मैं ऐसा कुछ नहीं लिख रहा हूं जिसके लिए मुझे कई कंपाइलरों में संगत होने की आवश्यकता है, लेकिन बाद में यह हो सकता है (जब कोड वेब पर रखा जाता है, तो उपयोगकर्ता संकलक त्रुटियां नहीं प्राप्त करना चाहते हैं), लेकिन मैं लिखना नहीं चाहता कुछ गलत है, या सिर्फ मूल नहीं है। जबकि दूसरी पंक्ति सामान्य रूप से संकलित"ऑटो" टाइप कटौती संकलन जबकि स्पष्ट प्रकार त्रुटि देता है
class A{
class B{
public:
int i;
};
B myB;
public:
B& getB() { return myB; }
};
int main()
{
A a;
A::B& b = a.getB();
auto& b2 = a.getB();
}
पहली पंक्ति के अंदर मुख्य पॉप्स error C2248: 'A::B' : cannot access private class declared in class 'A'
:
तो यह परीक्षण कोड है। मुझे आश्चर्य है, क्या ऑटो इस तरह काम करना चाहिए या विजुअल स्टूडियो में यह एक और बग है?
मैं किसी अन्य संकलक की जरूरत नहीं है मैं इसे
साथ पर परीक्षण कर सकते हैं तुम भी std::cout << b2.i << "\n";
की तरह सामान लिख सकते हैं और यह बिल्कुल ठीक संकलित
के अनुसार πάντα ῥεῖ की टिप्पणी, मैं ideone जीसीसी 4.8 के साथ करने की कोशिश की .1 और यह उसी तरह संकलित करता है, पहली पंक्ति त्रुटि है, दूसरी पंक्ति पूरी तरह ठीक है।
_'PS: मेरे पास कोई अन्य कंपाइलर नहीं है जिसका मैं इसे परीक्षण कर सकता हूं'_: http://isocpp.org/blog/2013/01/online-c-compilers विशेष रूप से http://rise4fun.com/ वीसीपीपी –
दिलचस्प। मैंने इस तरह की किसी चीज़ की वैधता कभी नहीं मानी थी, लेकिन ऐसा लगता है कि यह जीसीसी और क्लैंग के साथ भी संकलित है। –
'बी' और 'बी 2' शुरू करने के लिए 'मुख्य' में कोड के साथ, आउटपुट कथन [* अपरिभाषित व्यवहार *] (http://en.wikipedia.org/wiki/Undefined_behavior) को' बी' और ' बी 2' उन वस्तुओं के संदर्भ हैं जिन्हें –