[英]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.