如果从指针到Base成员的转换到Derived类成员的指针有效,为什么以下代码无法编译
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 :: )()'
答案 0 :(得分:0)
因为Der
不是来自Base
。你的课程是无关的。它们之间没有继承关系。
如果您确实将Der
定义为Base
class Der : public Base
{
...
代码将编译。
编译器无法猜测您是否希望从Der
派生Base
。你应该记得明确告诉编译器它。