कुछ कोड संकलित करते समय मैंने एक संकलक त्रुटि में भाग लिया जो मुझे अजीब लग रहा था और विरासत, नेस्टेड कक्षाओं, घोषणाओं का उपयोग करके, और संशोधक संशोधक से संबंधित है।घोषणापत्र और एक्सेस संशोधक का उपयोग करके नेस्टेड क्लास
असल में, इरादा एक व्युत्पन्न प्रकार के लिए आधार प्रकार के घोंसला संरक्षित वर्ग का पर्दाफाश करने के लिए है।
कम उदाहरण निम्न समस्या प्रदर्शित करने के लिए:
class Base
{
protected:
struct Nested
{
enum value_enum
{
val = 0,
val2,
val3
};
};
};
class Derived : public Base
{
public:
using Base::Nested;
};
int main(int argc, char** argv)
{
//Base::Nested aa; // error, as (I) expected
//Base::Nested::value_enum ab; // error, as (I) expected
Derived::Nested ba; // works, as (I) expected
Derived::Nested::value_enum bb; // MSVC error, as (I) did not expect
return 0;
}
live देखें।
MSVC11 (v11.00.61030) निम्न त्रुटि के साथ इस कोड पर chokes:
error C2248: 'Base::Nested' : cannot access protected struct declared in class 'Base'
दोनों जीसीसी और बजना ठीक से इस संकलन, मानक से प्रासंगिक भागों उद्धृत करने की क्षमता के बिना तो, मैं तर्क है यह एक एमएसवीसी बग है।
क्या एमएसवीसी के साथ इसके आसपास कोई रास्ता है?
मैं संकलन समय पर एक त्रुटि हो रही है लगता है कि बाद की समस्याओं के लिए में चल रहा से बेहतर है। –
इसके संरक्षित होने के बाद, मानक मुख्य फ़ंक्शन द्वारा इसे –
@AliKazmi तक सुरक्षित नहीं किया जा सकता है संरक्षित क्या है? 'व्युत्पन्न 'नेस्टेड के लिए एक्सेस संशोधक को बदलता है; यह इस मामले में संरक्षित नहीं है। साथ ही, 'Nest_enum'' नेस्टेड 'के अंदर सुरक्षित नहीं है। – namezero