this one पर अनुवर्ती प्रश्न।संकलक टेम्पलेट तर्क सूची के अंदर बेस क्लास कन्स्ट्रक्टर का चयन क्यों करता है?
असल में, निम्न कोड में, क्यों संकलक लगता है कि B
A<B>
अंदर C
रों निर्माता में B
आधार वर्ग के (दुर्गम) निर्माता का उल्लेख?
struct B{};
template <typename T>
struct A : private T{};
struct C : public A<B>{
C(A<B>); // ERROR HERE
};
Live example on Ideone. आउटपुट:
prog.cpp:1:9: error: 'struct B B::B' is inaccessible
prog.cpp:7:7: error: within this context
नोट है कि एक ही त्रुटि पॉप अप होता है अगर आप A<B*>
, A<B&>
या यहाँ तक कि A<const B>
के निर्माता तर्क बदल जाते हैं। यह भी ध्यान रखें कि तीन एमएसवीसी 10, जीसीसी 4.7 और क्लैंग 3.1 टीओटी त्रुटि होगी, इसलिए यह सी ++ स्पेक में कुछ होना चाहिए। यह क्या है?
मुझे नहीं पता कि आपने एक ही विषय क्यों बनाया है! आप उस विषय को बेहतर बनाने के लिए उस विषय को संपादित कर सकते थे। – Nawaz
@ नवाज: यह मूल रूप से एक अलग सवाल है। मैं पूछता हूं "क्यों", दूसरा सवाल पूछता है "क्या करना है"। – Xeo
मैन, मुझे कक्षा ए के साथ एक से अधिक बार काट दिया गया है: निजी नोट कॉपी करने योग्य {कक्षा बी: निजी नोट कॉपी करने योग्य {}}; '। मुझे लगता है कि यह वैश्विक दायरे को देखने से पहले वर्ग के दायरे में प्रतीकों को देखता है। –