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

Langage C++ Discussion :

Template et iterator


Sujet :

Langage C++

Vue hybride

bleast8 Template et iterator 19/11/2006, 15h34
MatRem Tu as bien inclus <vector>... 19/11/2006, 15h46
bleast8 include <vector> c'était bon,... 19/11/2006, 15h55
alceste Il doit manquer un ";"... 19/11/2006, 15h59
bleast8 Malheuresement je ne pense... 19/11/2006, 16h08
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut Template et iterator
    Bonjour à tous,
    je me trouve ennuyé par la fonction template suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template <typename V, typename E>
    bool contains(const V& v, const E& e) {
    	V::const_iterator it;
     
    	for (it = v.begin(); it != v.end(); ++it)
    		if ((*it) == e) return true;
     
    	return false;
    }
    Le problème est que le const_iterator n'est pas reconnu ...
    (Cette fonction ne prendra que des vector stl en premier paramètre)

    J'ai également essayé cela sans succés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template <typename T>
    bool contains(const vector<T>& v, const T& e) {
     
    	vector<T>::const_iterator it;
     
    	for (it = v.begin(); it != v.end(); ++it)
    		if ((*it) == e) return true;
     
    	return false;
    }
    Cette fois, la compile exige de connaître T :
    error: ISO C++ forbids declaration of `vector' with no type
    quelqu'un aurait-il une idée ?

    Merci d'avance ..

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Tu as bien inclus <vector> est mis using namespace std;?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    include <vector> c'était bon, j'avais effectivement oublié le "using namespace" , d'où l'erreur de paramètre de vector (il est maintenant ajouté). Cependant çà revient à la première erreur:
    error: expected `;' before "it"

  4. #4
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Il doit manquer un ";" quelque part. Quelle est la ligne de cette erreur ? En général il faut regarder la ligne précédent la ligne de l'erreur car si on a oublié de terminer une expression l'erreur vient par la suite.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    Malheuresement je ne pense pas que ce soit le problème, au dessus de cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template <typename T>
    bool contains(const vector<T>& v, const T& e) {
    	
    	vector<T>::const_iterator it; // ligne d'erreur
    	
    	for (it = v.begin(); it != v.end(); ++it)
    		if ((*it) == e) return true;
    	
    	return false;
    }
    il y a du code qui tournait parfaitement avant. Pas de ; manquant ..

    Je pense que le problème vient du fait que l'on veut accéder au namespace d'un type qui n'est pas encore construit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<T>::const_iterator it; // ligne d'erreur

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Salut,

    Fais attention au fait que, si tu ne précise pas (et il est d'ailleurs conseillé de ne pas l'utiliser) l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using namespace std;
    tu devras prévenir systématiquement que tu utilise quelque chose qui se trouve dans l'espace de nommage std pour tout ce qui a trait à la SL/STL...

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template <typename T>
    bool contains(const std::vector<T>& v, const T& e) {
    	
    	std::vector<T>::const_iterator it; // ligne d'erreur
    	
    	for (it = v.begin(); it != v.end(); ++it)
    		if ((*it) == e) return true;
    	
    	return false;
    }
    Si tu ne le fais pas, et c'est la raison pour laquelle je soupçonnes fortement ce genre de problème, les vector<T> ou autres (const_)iterator basés dessus ne seront pas reconnus en tant que types, et, fatalement, il attendra une "fin d'instruction" (le fameux ; )

    (je ne serais d'ailleurs pas tout à fait surpris que, juste avant l'erreur "error: expected `;' before "it" ", tu n'en aie une autre du genre de "erreur: vector<T>::const_iterator n'est pas un type" )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. fonction template et iterator
    Par befalimpertinent dans le forum Langage
    Réponses: 9
    Dernier message: 12/05/2009, 12h41
  2. Template - vector - iterator
    Par jmeuf dans le forum Langage
    Réponses: 6
    Dernier message: 30/03/2007, 13h42
  3. Map::iterator et template
    Par kast_or dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 19h15
  4. Erreur Gcc, template et iterator
    Par aidos dans le forum Langage
    Réponses: 7
    Dernier message: 14/03/2006, 09h04
  5. Template et iterator.
    Par tibtib17 dans le forum Langage
    Réponses: 5
    Dernier message: 29/07/2005, 14h06

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