Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème d'iterator template

Sujet résolu
    24 octobre 2008 à 16:19:41

    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.


    voila le code qui plante :

    typedef Tree<T> *aaa;
    typedef std::vector<aaa>::const_iterator it_type; // ERREUR : expected initializer before it_type
    it_type it;
    



    ou bien directement:

    std::vector<Tree<T> *>::const_iterator it; //IDEM!
    




    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?


    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2008 à 16:23:24

      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"
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        24 octobre 2008 à 16:31:10

        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:

        template<class T>
        class{...};

        et

        template<typename T>
        class{...};


        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2008 à 16:44:16

          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.
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

          problème d'iterator template

          × 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.
          • Editeur
          • Markdown