簡體   English   中英

為什么在涉及模板類時,派生類無法訪問基函數

[英]Why base function cannot be accessed by derived class when involving template classes

以下代碼給出了編譯錯誤:

template <typename T>
class Base
{
    public:
    void bar(){};
};

template <typename T>
class Derived : public Base<T>
{
    public:
    void foo() { bar(); }   //Error
};

int main()
{
    Derived *b = new Derived;
    b->foo();
}

錯誤

Line 12: error: there are no arguments to 'bar' that depend on a template parameter, so a declaration of 'bar' must be available

為什么會出現這個錯誤?

名稱foo()不依賴於任何Derived的模板參數 - 它是一個非依賴名稱。 另一方面,找到foo()的基類 - Base<T> - 確實依賴於Derived的模板參數之一(即T ),因此它是一個依賴的基類 查找非依賴名稱時,C ++不會查找依賴的基類。

要解決此問題,您需要將對Derived::foo() bar()的調用限定為this->bar()Base<T>::bar()

這個C ++ FAQ項很好地解釋了它:請參閱http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19

您提供的代碼在您指定的行上沒有構建錯誤。 它有一個在這里:

Derived *b = new Derived;

應該是:

Derived<int> *b = new Derived<int>();

(或使用你想要的任何類型而不是int。)

暫無
暫無

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

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