2016-05-14 74 views
0

首先參數化類一個可以通過一個參數化類作爲參數傳遞給另一個將由另一

template<typename T> 
class elements 
{ 
    protected: 
     int e,f; 
    public: 
     elements(){} 
     elements(int ee):e(ee){} 
     const elements& operator=(const elements& other) 
     { 
      e = other.e; return *this; 
     } 

}; 

基類

template<typename T> 
class list 
{ 
    protected: 
     T item; 
}; 

最後,在爭用的類派生

template<typename T> 
class row:public list<elements<T> > 
{ 
    public: 
     row(int a) 
     { 
      item; 
     } 
}; 

如果參數被指定爲int,list等,那麼程序運行,否則我不斷收到錯誤 'item'未在此範圍內聲明,

我似乎無法開始工作,並希望有人能幫助我理解它是如何工作的。

感謝

+2

是什麼'element'作爲一個模板的意義呢?它不使用'T' – user463035818

+0

請發佈一個完整的程序來演示你所得到的錯誤。 – xaxxon

+0

@ m.s。好決定。 – xaxxon

回答

0

你只需要指定正確的範圍:

template<typename T> 
class row:public list<elements<T> > 
{ 
    public: 
     row(int a) 
     { 
      list<elements<T> >::item; 
     // ^^^^^^^^^^^^^^^^^^^^ 
     } 
}; 

Demo

+0

非常酷,他們都工作:https://godbolt.org/g/Pc8oLn – xaxxon

0

簡短的答案是,編譯器不知道什麼item是。根據T是什麼,它可能是一個類型,一個變量。因爲沒有更多的信息就無法分辨出來,所以它會檢查它是否是沒有模板信息而立即可用的東西,並且因爲它不是,編譯器不得不放棄。

通過說this->item而不是隻是item,你非常清楚地告訴編譯器,item是一個變量。

在評論中鏈接的問題的答案是相當不錯的,值得一讀。

正如你可以在這裏看到,無論是this->和類範圍都工作:https://godbolt.org/g/Pc8oLn

相關問題