Rechercher : dans
Par :

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

Dernière réponse le 27 jun 2006 à 17:20:55 zzegod, le 27 jun 2006 à 15:30:18 
 Signaler ce message aux modérateurs

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 !
-- ZZ

Meilleures réponses pour « [C++] retour itérateur générique » dans :
Générer des nombres aléatoires efficacement avec rand() VoirGénérer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Télécharger Amnesty Generator VoirDes milliers pour ne pas dire des millions de widgets circulent en ce moment sur le net ! Le problème c'est que vous ne pouvez pas toujours les avoir sur votre bureau que lorsque vous connecté ! Amnesty Generator vous donne la solution à ce grand...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les structures en langage C++ VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

1

mamiemando, le 27 jun 2006 à 16:01:26

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

Répondre à mamiemando

2

 zzegod, le 27 jun 2006 à 17:20:55

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 !
-- ZZ

Répondre à zzegod