嵌套的C++类外部成员的访问权限

Leo*_*Leo 5 c++

此代码不起作用(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)

谢谢!

Mar*_*one 0

C 嵌套在 B 中这一事实并没有赋予 C 对 B 成员的特殊访问权限。

funcA()的解决方案: (1) 将funcA()公开。或 (2) 改为调用 funcB()(委托给 funcA())。

迭代器的解决方案:将迭代器公开。