gpt4 book ai didi

c++ - 为什么指向从基到派生的成员转换的指​​针会出错

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:19 25 4
gpt4 key购买 nike

如果从指针到 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;
}

编译器报错

error: cannot convert 'void (Base::)()' to 'void (Der::)()' in initialization|

最佳答案

因为你的Der不是从Base派生的。你的类(class)是无关的。它们之间没有继承关系。

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

class Der : public Base
{
...

代码将编译。

编译器无法神奇地猜到您想从 Base 派生出 Der。你应该记得明确地告诉编译器它。

关于c++ - 为什么指向从基到派生的成员转换的指​​针会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19205879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com