Bonjour, j'ai une classe template qui represente un arbre.
template<class T>;
class Tree{
T node; // ce que contient le noeud
std::vector< Tree<T> * > son; // les fils du neud.
... (construction destruction copie)
}
Dans le code de ma classe, j'ai besoin d'itérer sur les objets de son, j'arrive très bien à faire ça avec un entier
(for i=0;i<son.size(),++i;){...} mais pas avec un itérateur.
curieusement, le code suivant (qui me définie un itérateur sur un vecteur d'entier, donc pas l'itérateur dont j'ai besoin) marche, et je n'arrive pas à saisir la différence entre les 2
typedef std::vector<int>::const_iterator it;
Comment faire pour déclarer un itérateur sur un type template?
Tu dois rajouter une typename pour dire au compilo : "tu vois cet identifiant que tu choppes dans une autre classe template que tu ne connais pas encore, en fait c'est un type"
Imghs : merci em mettant :
typedef typename std::vector<aaa>::const_iterator it_type
ça fonctionne.
C'est pas la première fois que je me fais avoir à ne pas mettre typename.
J'ai compris que ca permettais de faire comprendre au compilateur qu'un truc était un type, seulement je ne sais pas quand est ce qu'il a besoin que je lui dise, et quand est ce qu'il se débrouille tout seul.
Est ce que tu pourais m'expliquer dans quel cas c'est nescessaire?
ensuite tant qu'on est dans les typename, quelle est la difference entre:
C'est quand tu extrais un type d'une classe template dont l'argument est lui même paramètre de template au niveau où tu l'utilises.
Normalement, c'est traité dans la FAQ C++ de développez.
Dans le presque même ordre idée, il faut systématiquement préfixer les membres dans une classe template par this-> dans le code utilisateur des fonctions membres.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
* Un wrapper C++ pour sqlite * Une alternative a boost units
* Un wrapper C++ pour sqlite * Une alternative a boost units
* Un wrapper C++ pour sqlite * Une alternative a boost units