[C++] retour itérateur générique
Résolu
zzegod
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
zzegod Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
zzegod Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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 :
--> erreur : un ';' est attendu avant 'begin'
Quelqu'un peut-il éclairer ma lanterne ?
Merci d'avance !
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 !
A voir également:
- [C++] retour itérateur générique
- Clé générique windows 10 - Guide
- Retour à la ligne excel formule - Guide
- Retour à la ligne chatgpt - Forum Réseaux sociaux
- Notepad++ retour à la ligne ✓ - Forum Bureautique
- Retour à la ligne google sheet - Forum Google Docs
2 réponses
Oui la fonction begin() s'applique à un objet, car c'est une méthode de l'objet std::vector :
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 :
Bonne chance
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
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 !
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 !