2011-06-24 35 views
7

我是一個新手模板,所以請原諒我天真的問題。我得到的錯誤在此代碼:「使用類模板需要模板參數列表」是什麼意思?

template <class t> 
class a{ 
public: 
    int i; 
    a(t& ii):i(ii){} 
}; 


int main() 
{ 
    a *a1(new a(3)); 
    cout<<a1.i; 

    _getch(); 
} 

編譯錯誤:

  1. 'a' : use of class template requires template argument list
  2. 'a' : class has no constructors
+10

我不認爲這是很好的downvote問題,只是因爲一些天真被問......我不你不認爲你,迪翁沃特先生,在你的職業生涯中從來沒有通過這個舞臺,因爲你不明白這一點,或者你不清楚 –

+3

非常感謝你們!你是一個很好的地方......可以毫不嘲諷地回答幼稚的問題:)) –

+0

@Armen:公平地說,我們正在談論一個存在的C++書會回答的問題。 –

回答

6
a(t& ii):i(ii){} 

這應該是:

a(const t& ii):i(ii){} 

所以,你可以通過常量文字,和臨時的構造函數。

然後做到這一點:

a<int> *a1(new a<int>(3)); 

你也可以這樣寫:

a<int> a2(3); 
+1

這麼厲害! –

+0

模板中的類型錯誤。它肯定應該是'a * a1(new a (3));'只要確保Foo bar可以轉換爲int。 –

+1

@Martin:爲什麼? : -/ – Nawaz

10

使用

a<int> *a1(new a<int>(3)); 
^^^^^   ^^^^ 

如果はNT的模板參數自動推斷,你可以使用一個輔助功能:

template<class T> 
a<T> * createA (const T& arg) //please add const to your ctor, too. 
{ 
    return new a<T>(arg) 
} 
+0

我可以虛心地問一下downvote的用途嗎?對於我忘了的分號? –

相關問題