2010-09-01 88 views
0

爲什麼這不起作用? (!地獄的緣故)T不是班,但它是

template<class T> 
class A 
{ 
    typedef typename T::value_type value_type; 
public: 
    A(); 
}; 

我收到以下錯誤:
錯誤1個錯誤C2825: 'T':必須是一個類或命名空間時,其次是「::

但T是一堂課,我剛剛指出那不是嗎?所以有什麼問題?
謝謝。

+1

向我們展示您使用此模板的代碼。 – Thanatos 2010-09-01 19:38:16

回答

7

T可能是一個基本類型,這取決於你如何實例化模板...

+0

謝謝,我沒有看到在宣佈我已經有A 。再次感謝。 – 2010-09-01 19:41:36

2

在哪個模板專業化你得到這個錯誤?也許你在代碼中的某處做了類似A<int>的事情。如果您需要更好的信息,請提供更多關於出現錯誤的專業化信息。

0

只是FYI:如果在從模板創建具體類時遇到相關問題,Visual C++僅引發此類錯誤。您應該能夠從錯誤消息中很容易地確定發生的情況,並查看該代碼可能會讓您有很長的路要解決這些問題。

2

'class'關鍵字在用於指定模板類型參數時具有不同的含義。實際上,template<class T>template <typename T>是完全等價的,T可以是任何類型。編寫template<class T>絕不會告訴編譯器T應該只是一個類的類型。