URL: https://linuxfr.org/forums/programmation-c/posts/convertion-diterateur Title: Convertion d'iterateur Authors: Sebastien Date: 2005年04月15日T16:53:13+02:00 Tags: Score: 0 Salut les gens, J'ai deux classes : class Mere {}; class Fille : public Mere {}; Et un container de pointeurs vers des instances de class Fille : std::vector<Fille*> filles; J'aimerais savoir si je peux convertir un const_iterator sur un vector<Fille*> en un const_iterator sur un vector<Mere*> : std::vector<Mere*>::const_iterator i = filles.begin(); Je sais qu'il y a moyen de faire croire au compilateur (en l'occurence gcc3.2.3) qu'il y a une relation d'heritage entre les 2 containers (de la meme maniere qu'il y a une relation d'heritage entre les 2 classes), mais cela tient du vrai hack immonde, ce n'est pas ce qu'il y a de plus portable et ca ne marche pas avec l'heritage multiple. Il me semblait que, comme je n'ai que des vecteurs de pointeurs, je n'avais pas a me preoccuper des offsets qu'il y a entre classes de base et derivee, et donc qu'en laissant faire l'heritage, je devrais pouvoir arriver a m'en sortir... Mais : ../src/toto.cxx: In member function `int main()': ../src/toto.cxx:20: conversion from `__gnu_cxx::__normal_iterator<Fille**, std::vector<Fille*, std::allocator<Fille*> > >' to non-scalar type ` __gnu_cxx::__normal_iterator<Mere* const*, std::vector<Mere*, std::allocator<Mere*> > >' requested Faudrait-il que je definisse explicitement quelque part un convertisseur entre les iterateurs ? Vu le message d'erreur, je sens que c'est un truc tout bete. Une idee ? PS : J'ai aussi regarde du cote de boost::iterator_adaptor et boost::iterator_facade mais bon... Je suis rapidement arrive a mon niveau d'incompetence.