我在这样的设置中看到两个问题:
namespace ns1
{
class ParentClass
{
protected:
void callback();
};
}
namespace ns1
{
namespace ns2
{
class ChildClass : public ParentClass
{
public:
void method()
{
registerCallback(&ParentClass::callback);
}
};
}
}
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/