为什么指向成员从base到derived的转换会产生错误

时间:2013-10-06 05:54:51

标签: c++ inheritance type-conversion member-function-pointers

如果从指针到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 :: )()'

1 个答案:

答案 0 :(得分:0)

因为Der不是来自Base。你的课程是无关的。它们之间没有继承关系。

如果您确实将Der定义为Base

的后代
class Der : public Base
{
   ...

代码将编译。

编译器无法猜测您是否希望从Der派生Base。你应该记得明确告诉编译器它。