为什么指向从基础到派生的成员转换会产生错误
如果从指针转换为基本成员指向派生类成员的指针是有效的,为什么下面的代码无法编译
class Base
{
public:
virtual void fun1()
{
cout<<"fun1 in Base"<<endl;
}
};
class Der
{
public:
void fun1()
{
cout<<"fun1 in Der"<<endl;
}
};
int main()
{
void (Der::*funptr)() = &Base::fun1;
}
编译器给出一个错误说
错误:无法在初始化|中将'void(Base ::)()'转换为'void(Der ::)()'
因为你的Der
不是从Base
派生的。 你的课无关。 它们之间没有继承关系。
如果你确实将Der
定义为Base
的后代
class Der : public Base
{
...
代码将被编译。
编译器不能奇迹般地猜测你想从Base
派生你的Der
。 你应该记得明确告诉编译器。
上一篇: why does pointer to member conversion from base to derived gives error