簡體   English   中英

虛擬 function 在派生 class 中不可訪問

[英]virtual function not accessible in derived class

以下代碼無法編譯。 GCC 抱怨沒有匹配的 function 調用 'derived::print(std::__cxx11::string&)。

class base
{
public:
    virtual void print(float x){}
    virtual void print(std::string str){}
};

template<class ProcessType>
class CProcess : public base
{
public:
    CProcess(ProcessType* process): m_Storage(process){}
    void print(float x) override{m_Storage->print(x);}
    void print(std::string str) override{m_Storage->print(str);}
private:
    ProcessType* m_Storage;
};

class derived: public base
{
public:
    void print(float x) override{}
    //void print(std::string str) override{}
};

base* ptr = new CProcess<derived>(new derived);
ptr->print(1.0f);

Class 派生從 base 繼承print(std::string str)那么為什么會出現這個錯誤? 現在,如果我還在派生中評論void print(float x) override{} ,編譯器不會抱怨。

最終目標是在派生中實現print(float x)的新行為,但保留print(std::string str)的行為。

我將生產代碼剝離到盡可能小的版本以重現該問題,因此不推薦智能指針等,因為它們在生產代碼中。

問題不是由它是virtual引起的。 由於derived定義了它自己的print ,它隱藏了print的每個繼承的重載。

解決方案是using base::print; derived 確保這一行是public ,否則繼承的重載不會是public

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM