2015-05-06 123 views
1

我得到了下面的代码:访问受保护的成员[嵌套类]

class enclosing{ 
protected: 
    int var1 = 2; 
    int var2 = 4; 
public: 
    class problem{ 
    friend enclosing; 
    public: 
     void DoStuff(enclosing&e1){ 
      int Sum = e1.var1 + e1.var2; 
     } 
    }i1; 
}e1; 

我的问题是,如何访问封装类的保护成员变量? 这是否合法?

+0

相关:http://stackoverflow.com/questions/3058267/nested-class-member-function-cant-access-function-of-enclosing-class-why?rq = 1 – EdChum

+0

不,不是。您需要为内部类提供要处理的封闭类的实例。 –

+0

所以我应该添加一个“朋友”? – DVSProductions

回答

0

你有友情倒退 - 一个班级不能宣布自己是别人的朋友。

与Java的“内部类”不同,在类中定义的类不会自动访问定义它的类的实例 - “内部”类完全独立,您需要将它传递给实例你希望它与之合作。

像这样:

class enclosing 
{ 
protected: 
    int var1 = 2; 
    int var2 = 4; 
public: 
    friend class problem; 
    class problem 
    { 
    public: 
     void DoStuff(enclosing& e){ 
      int Sum = e.var1 + e.var2; 
     } 
    } i1; 
} e1; 

int main() 
{ 
    e1.i1.DoStuff(e1); 
    enclosing e2; 
    e2.i1.DoStuff(e1); // Also works 
    enclosing::problem x; 
    x.DoStuff(e2); // This, too. 
} 
+0

感谢您的详细解释 – DVSProductions

0

数据成员必须通过封闭类的对象来访问。例如

void DoStuff(const enclosing &e){ 
      int Sum = e.var1 + e.var2; 
     } 
+0

谢谢你,你做了我的一天。最后寻找一小时后的好解决方案 – DVSProductions