此代码不起作用(MS VS 2005),
b->funcA();
B::iterator iter;
Run Code Online (Sandbox Code Playgroud)
无法访问A类中声明的受保护成员
如果我删除D类,一切都很好地编译.
我想知道这只是一个错误还是标准?
class A
{
protected:
void funcA() { }
class iterator { };
};
class D {
class B : public A {
class C {
B* b;
public:
void funcC() {
b->funcA();
B::iterator iter;
}
};
public:
void funcB() {
funcA();
}
};
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
C 嵌套在 B 中这一事实并没有赋予 C 对 B 成员的特殊访问权限。
funcA()的解决方案: (1) 将funcA()公开。或 (2) 改为调用 funcB()(委托给 funcA())。
迭代器的解决方案:将迭代器公开。