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++

  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 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    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

  7. #7
    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
    Il y avait bien le
    avant la fontion template.

    L'erreur
    error: expected `;' before "it"
    est la première erreur.

    J'ai tout de même rajouté sans trop y croire les std:: (en plus du using namespace)
    -> Toujours la même erreur ....

  8. #8
    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 était inutile d'ajouter "std::" puisque tu avais déclaré "using namespace std;". C'est la raison pour laquelle je ne t'ai pas dis de l'ajouter.

  9. #9
    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
    Oui, toujours est-il que le std:: n'est pas le problème ... Personne ne pense que le problème est le fait que l'on veut accéder au namespace d'un type qui n'est pas encore construit ?

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typename V::const_iterator it;
    C'est dans la

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le problème c'est simplement qu'il te faut un typename.

    Edit: argh laurent a été plus rapide

  12. #12
    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
    Merci tout marche !
    (dsl pour la FAQ j'ai pas pensé à m'attarder sur le typename)

  13. #13
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    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 292
    Par défaut
    Et accessoirement, ta fonction, à un détail près, c'est un std::find(/_if) en légèrement moins efficace.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

+ 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