2011-06-24 18 views
7

Jestem początkującym do szablonów, więc przepraszam za naiwne pytania. Dostaję błędy w tym kodzie:Co oznacza "użycie szablonu klasy wymaga listy argumentów szablonu"?

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


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

    _getch(); 
} 

błędy kompilacji:

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

Nie sądzę miło downvote pytanie, tylko dlatego, że coś naiwny jest proszony ... I don Sądzę, że ty, panienwładzerze, nigdy nie przeszedłsz tego etapu w życiu zawodowym, kiedy coś tak oczywistego, jak to nie było dla ciebie jasne, –

+3

Wielkie dzięki! Ty ppl czynisz z SO wspaniałe miejsce ... odpowiadając na naiwnie Qs skromnie bez śmieszności :))) –

+0

@Armen: Aby być uczciwym, mówimy o pytaniu, na które mogłaby odpowiedzieć każda istniejąca książka w C++. –

Odpowiedz

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

Powinno być:

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

tak, że można przekazać const literały i temporaries do konstruktora .

A potem to zrobić:

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

Można również napisać:

a<int> a2(3); 
+1

thnk u so much !! –

+0

Masz niewłaściwy typ w szablonie. To zdecydowanie powinno być 'a * a1 (nowe a (3));' Tylko upewnij się, że pasek Foo jest zamienny do int. –

+1

@Martin: Dlaczego? : -/ – Nawaz

10

Korzystając

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

Jeśli wa nt swój parametr szablonu zostać automatycznie wywnioskować, można użyć funkcji pomocnika:

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

Czy mogę pokornie zapytać, o co chodzi? O średnik zapomniałem? –

Powiązane problemy