2009-02-27 7 views
4

i ont la méthode de modèle suivant,STL iterator avec modèle personnalisé

template <class T> 
void Class::setData(vector<T> data) 
{  
    vector<T>::iterator it; 
} 

et je reçois l'erreur de compilation suivante (XCode/gcc)

error: expected `;' before 'it'

j'ai trouvé quelqu'un d'autre avec un même problème here (read down to see it's the same even though it starts out with a different issue) mais ils semblent avoir résolu en mettant à jour Visual Studio. Cela me fait deviner que c'est un problème de compilateur et qu'il devrait compiler, est-ce exact? L'itération via l'indexation de 0 à la taille fonctionne, mais ce n'est pas la façon dont je préférerais implémenter cette fonction. Y a-t-il une autre solution? Merci

+0

Note: envisager le passage dans "vecteur et données", ou peut-être "vecteur const & données" non "vecteur données". Les deux premiers passeront dans une référence au vecteur, ce dernier fera une copie complète du vecteur. –

+0

Bien sûr, ce n'était qu'un exemple :) – DavidG

Répondre

10

Cas classique d'utilisation du mot clé typename. En espérant que vous avez #include -ed vector et iterator et avez un using namespace std; quelque part dans la portée. Utilisation:

typename vector<T>::iterator it; 

Rechercher les noms dépendants. Démarrer here.

+0

wow merci, lien impressionnant. – DavidG

0

Essayez:

template <class T> 
void Class::setData(std::vector<T> data) 
{  
    std::vector<T>::iterator it; 
} 

Just est le cas, il est une déclaration using manquante?

+0

S'il avait manqué l'instruction using, il aurait aussi une erreur sur la signature de la fonction. –

+0

non, mes espaces de noms et les inclus sont dans un en-tête pré-compilé – DavidG

1

Je pense que vous manque une typename:

#include <vector> 
using namespace std; 

class Class{ 
public: 
    template <class T> 
    void setData(vector<T> data) { 
     typename vector<T>::iterator it; 
    } 
};