IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Template] Pb d'iterateur generique


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut [Template] Pb d'iterateur generique
    Slt,

    j'ai une classe qui s'appelle Environnement qui est generique et qui ne fait qu'heriter de list<T>
    je n'ai qu'un .h Environnement.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _ENV_
    #define _ENV_
     
    #include <list>
    using namespace std;
     
    template <typename T>
    class Environnement : public list<T>
    {
     
    };
    #endif
    Ensuite j'ai une autre classe genrique et c la que j'ai un pb qui s'appelle
    Agent (je n'ai qu'un .h Agent.h)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #ifndef _AGENT_
    #define _AGENT_
     
    #include <iostream>
    #include <iterator>
    #include "Environnement.h"
     
    using namespace std;
     
    template <typename T>
    class Agent
    {
    	protected:
    	Environnement<T> envPercu;
     
    	public:
     
    	/* Construit un agent sans environnement */
    	Agent()
    	{}
     
    	/* Creer un agent avec un environnement */
    	Agent(Environnement<T> e)
    	{
    		envPercu = e;
    	}
     
            /* Ajoute un Objet a l'environnement de l'agent a l'emplacement i */
    	void addObjet(T & object, int i)
    	{
     
    		int cpt = 0 ;
    		Environnement<T>::iterator it; // c la mon pb
    		it = envPercu.begin();
     
    		// on place l'iterateur en i eme position
    		while (it != envPercu.end() && cpt < (i - 1))
    		{
    			cpt++;
    			it++;
    		}
     
    		if(it == envPercu.end())
    			cout << "Indice invalide" <<endl;
     
    		// creation d'un iterateur permettant d'inserer
    		insert_iterator<Environnement<T> > i_it(envPercu, it);
     
    		// insertion de l'objet
    		*i_it = object;	
     
    	}
     
    ...
     
    };
     
    #endif
    j'utilise g++ , mon pb est qu'il ne compile pas. il ne comprend pas ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Environnement<T>::iterator it;
    il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Agent.h: In member function 'vpod Agent<T>::addObjet(T&, int)':
    Agent.h:39: error expected ';' before "it"
    Agent.h:40: error 'it' undeclared (first use this function)
    Agent.h:40: error (Each undeclared identifier is reported only once for each function it appears in.)


    @++ et merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Les containers dela SL ne sontpas fais pour être dérivés publiquement. C'est possible, mais il y a des trus à savoir après, et des bétises à ne pas faire.

    De plus, tu vas devoir réexporter tes constructeurs, et peut-être bien aussi les typedefs du type dont tu dérives -- je n'en suis pas à 100% sûr, mais ton problème y ressemble beaucoup.

    (Sinon, il me semble qu'il y a des facilités pour itérer en comptant dans boost.iterator)

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Merci de ton aide mais la ce n'etait pas ca. En fait il faut indiquer au compilateur que c'est un type et non un objet en utilisant typename.

    La ligne ou j'avais un pb devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typename Environnement<T>::iterator it;
    @++ et merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/12/2009, 20h44
  2. iterateur d'un conteneur template dans une classe template
    Par coyotte507 dans le forum Langage
    Réponses: 2
    Dernier message: 03/07/2009, 13h08
  3. Classe pile generique avec template
    Par marbouchi dans le forum Langage
    Réponses: 10
    Dernier message: 10/05/2009, 10h10
  4. Pb template liste generique
    Par luffy.luck dans le forum Langage
    Réponses: 5
    Dernier message: 06/10/2008, 18h12
  5. Problème avec templates et iterateurs :(
    Par donkeyquote dans le forum C++
    Réponses: 5
    Dernier message: 01/11/2007, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo