派生类无法正确查看父类

Mr.*_*Boy 2 c++

我在这样的设置中看到两个问题:

namespace ns1
    {
     class ParentClass
     {
      protected:
       void callback();
     };
    }

    namespace ns1
    {
     namespace ns2
     {
      class ChildClass : public ParentClass
      {
        public:
        void method()
        {
         registerCallback(&ParentClass::callback);
        }
      };
     }
    }
Run Code Online (Sandbox Code Playgroud)
  1. ChildClass :: method()给出了编译错误:" 'ns1 :: ParentClass :: callback':无法访问类'ns1 :: ParentClass'中声明的受保护成员 "
  2. ParentClass *pObj = new ChildClass()给出一个错误,它不能在没有强制转换的情况下进行转换.C++可以快乐地投降,不是吗?

Joh*_*ing 6

更改:

registerCallback(&ParentClass::callback);
Run Code Online (Sandbox Code Playgroud)

...至:

registerCallback(&ChildClass::callback);
Run Code Online (Sandbox Code Playgroud)

原因是因为&ParentClass :: callback是一个完全限定的类型名称,不是从ChildClass的上下文解析而是从全局上下文中解析.换句话说,它是同样的问题:

class Thingy
{
protected:
    virtual int Foo() {};
};


int main() 
{
    Thingy t;
    t.Foo();
    return 0;

}
Run Code Online (Sandbox Code Playgroud)