1

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

4

1 回答 1

0

因为你Der不是从Base. 你的课程是不相关的。它们之间没有继承关系。

如果您确实将您Der的定义为Base

class Der : public Base
{
   ...

代码将编译。

编译器无法神奇地猜测您想要DerBase. 你应该记住明确告诉编译器它。

于 2013-10-06T06:03:16.393 回答