![](/img/trans.png)
[英]Pointer-to-Member invalid conversion from ‘Derived X::*’ to ‘Base X::*’
[英]why does pointer to member conversion from base to derived gives error
如果从指针到基本成员的指针到指向派生类成员的指针的转换有效,为什么以下代码无法编译
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
。 您应该记住要明确地告诉编译器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.