繁体   English   中英

为什么从成员到派生的成员转换的指​​针给出错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM