gpt4 book ai didi

c++ - 派生类无法正确查看父类

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:24 24 4
gpt4 key购买 nike

我在这样的设置中发现了两个问题:

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

namespace ns1
{
namespace ns2
{
class ChildClass : public ParentClass
{
public:
void method()
{
registerCallback(&ParentClass::callback);
}
};
}
}
  1. ChildClass::method() 给出编译错误:“'ns1::ParentClass::callback':无法访问在类'ns1::ParentClass'中声明的 protected 成员
  2. 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com