[英]Pointer-to-Member invalid conversion from ‘Derived X::*’ to ‘Base X::*’
[英]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.