为什么指向从基础到派生的成员转换会产生错误

如果从指针转换为基本成员指向派生类成员的指针是有效的,为什么下面的代码无法编译

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 。 你应该记得明确告诉编译器。

链接地址: http://www.djcxy.com/p/23329.html

上一篇: why does pointer to member conversion from base to derived gives error

下一篇: Calling member of Derived class from virtual function