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

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

    namespace ns1
    {
     namespace ns2
     {
      class ChildClass : public ParentClass
      {
        public:
        void method()
        {
         registerCallback(&ParentClass::callback);
        }
      };
     }
    }
  • ChildClass::method()给出编译错误:“'ns1::ParentClass::callback':无法访问在类'ns1::ParentClass'中声明的 protected 成员”
  • ParentClass *pObj = new ChildClass()给出了一个错误,即没有强制转换就无法进行转换。 C++可以快乐地向下转换,不是吗?
  • 最佳答案

    更改:

    registerCallback(&ParentClass::callback);
    

    ...至:
    registerCallback(&ChildClass::callback);
    

    原因是因为&ParentClass::callback是完全限定的类型名,不是从ChildClass的上下文解析而是从全局上下文解析。换句话说,这是相同的问题:
    class Thingy
    {
    protected:
        virtual int Foo() {};
    };
    
    
    int main()
    {
        Thingy t;
        t.Foo();
        return 0;
    
    }
    

    关于c++ - 派生类无法正确看到父类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2059208/

    10-13 08:20