[C++] retour itérateur générique

Résolu/Fermé
zzegod Messages postés 3 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 28 juin 2006 - 27 juin 2006 à 15:30
zzegod Messages postés 3 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 28 juin 2006 - 27 juin 2006 à 17:20
Salut,

J'ai une classe template (disons A<T,U>) qui contient un vector de la STL où sont stockés des pointeurs sur des instances d'une autre classe template (disons B<U>).

J'écris un accesseur qui devrait me renvoyer l'itérateur sur le début de ce vector mais le compilo ne veut pas :

std::vector<B<U>*>::iterator  begin();


--> erreur : un ';' est attendu avant 'begin'

Quelqu'un peut-il éclairer ma lanterne ?

Merci d'avance !

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
27 juin 2006 à 16:01
Oui la fonction begin() s'applique à un objet, car c'est une méthode de l'objet std::vector :
std::vector<B<U>*> v;
std::vector<B<U>*>::iterator vit = v.begin();

Attention si B et/ou U sont des types template, le type std::vector<B<U>*> est indéterminé à ce stade et on ne peut accéder aux champs iterator, const_iterator,... On règle alors le problème avec un typename :
typename std::vector<B<U>*>::iterator vit = v.begin();

Bonne chance
0
zzegod Messages postés 3 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 28 juin 2006
27 juin 2006 à 17:20
Merci pour ta réponse.

En fait, je n'étais pas très clair dans mon post : ma ligne de code, c'était la déclaration de ma propre méthode "begin" de ma classe A<T>.

Toutefois, en creusant ta remarque sur le non typage statique des template et l'usage du mot clé typename, j'ai réglé mon problème : j'ignorais juste que C++ interprétait ce genre de déclarations comme des expressions !

Encore merci !
0