2010-05-02 6 views
0

j'ai utilisé une classe simple pour un programme de test sur les modèles, voici ce que je faisais:question concernant C++ modèles

template <typename T> 
class test 
{ 
public: 
    test<T>::test(); 
    T out(); 
}; 

template <typename T> 
test<T>::test() 
{ 
} 

T test<T>::out() 
{ 
} 

int main() 
{ 
    //test<int> t; 
} 

Mais lorsque je tente de le compiler dit « T »: identificateur non déclaré et l'utilisation du modèle de classe nécessite la liste d'arguments modèle, pointant vers la même ligne, où j'ai implémenté la méthode out(). Quelqu'un peut-il s'il vous plaît expliquer quel est le problème? J'utilise Visual Studio 2008.

Répondre

0

Votre définition du membre de sortie manque la liste d'arguments modèle. à lire: -

template <typename T> 
T test<T>::out() 
{ 
} 
+0

L'OP n'a pas indenté le code, donc le '' a été considéré comme un élément HTML inconnu et ignoré. –

+0

Oups - bon point, même si je pense que la réponse est toujours correcte - j'ai juste la mauvaise liste des arguments manquants. – Stewart

+0

@Marcelo Cantos - changé. Merci pour les commentaires – Stewart

0

Cette ligne est faux:

test<T>::test(); 

il suffit d'écrire ceci:

test(); 
+0

Ceci est faux; cela définirait simplement une nouvelle fonction libre au lieu de la méthode de classe. – tzaman

+0

Je suppose que j'aurais dû être plus clair. Je parle de la déclaration dans la classe, pas de la définition après. (Le point-virgule devrait le donner.) –

+0

Oh, je n'ai pas vu ça. -(-1) :) – tzaman

5

Suite est plus précis:

template <typename T> 
class test 
{ 
public: 
    test(); 
    T out(); 
}; 

template <typename T> 
test<T>::test() 
{ 
} 

template <typename T> 
T test<T>::out() 
{ 
} 

1) Don ne pas utiliser <T> à l'intérieur de la classe 2) N'oubliez pas de déclarer le modèle <T> avant chaque déclaration de méthode hors du corps de la classe