簡體   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