2011-06-24 23 views
7

Şablonlardan yeni çıkan biriyim, lütfen bana naif sorular için özür dilerim. Bu kod hataları alıyorum:"Sınıf şablonunun kullanımı şablon argüman listesi gerektirir" ne demektir?

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


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

    _getch(); 
} 

hataları derleme:

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

Ben naif bir şey ... Ben don soruluyor çünkü sadece, soru downvote güzel sanmıyorum

Ve sonra bunu Sizce, Bay.Downvoter, bu sahneyi bu aşamada asla geçmediniz, çünkü bu sizin için açık olmadığı kadar açık bir şey olduğunda ya –

+3

Çok teşekkürler Teşekkürler! Sen ppl yapmak harika bir yer ... naif Qs mütevazi sadiculing olmadan :))) –

+0

@Armen: Adil olmak gerekirse, varolan herhangi bir C + + kitabının cevaplayacağı bir sorudan bahsediyoruz. –

cevap

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

Bu olmalıdır: otomatik çıkarılabilir olmak için şablon parametresi nt, bir yardımcı işlev kullanabilirsiniz Yani

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

Eğer kurucusuna const değişmezleri ve geçiciri geçirebilmesi .

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

Ayrıca yazabilirsiniz:

a<int> a2(3); 
+1

Çok teşekkürler! –

+0

Şablonda yanlış türde yazdınız. Kesinlikle bir * a1 (yeni bir (3)) olmalıdır; 'Sadece Foo çubuğunun int'ye dönüştürülebilir olduğundan emin olun. –

+1

@Martin: Neden? : -/ – Nawaz

10

kullanın

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

Eğer wa olursa

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

Alçakgönüllü için ne yaptıklarını acaba sorabilir miyim? Noktalı virgül için unuttum mu? –

İlgili konular