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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Template et iterator.
    Bonjour,

    J'ai un warning à la compilation de ce fichier

    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
     
    // STL
    #include <string>
    // structures de données et algorithmes
    #include <vector>
    // Flux
    #include <iostream>
     
    using namespace std;
     
     
    template<typename T>
    void affiche(const vector<T> & vect, const string & sep);
     
    int main()
    {
    	vector<int> v(10);
    	affiche(v, " & ");
    	return 0;
    }
     
     
    template<typename type>
    void affiche(const vector<type> & vect, const string & sep)
    {
    	vector<type>::const_iterator it, ideb, ifin;
    	ideb = vect.begin();
    	ifin = vect.end();
     
    	for(it = ideb; it != ifin; ++it)
    		cout << *it << sep;
    	cout << endl;
    }
    à la compilation, gcc me donne (avec les options -Wall -ansi -pedantic)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Main2.cpp: In function `void affiche(const std::vector<T,
       std::allocator<_CharT> >&, const std::string&)':
    Main2.cpp:36: error: syntax error before `,' token
    Main2.cpp: In function `void affiche(const std::vector<T,
       std::allocator<_CharT> >&, const std::string&) [with T = int]':
    Main2.cpp:28:   instantiated from here
    Main2.cpp:37: error: `ideb' undeclared (first use this function)
    Main2.cpp:37: error: (Each undeclared identifier is reported only once for each
     
       function it appears in.)
    Main2.cpp:28:   instantiated from here
    Main2.cpp:38: error: `ifin' undeclared (first use this function)
    Main2.cpp:40: error: `it' undeclared (first use this function)
    Si j'enlève le -pedantic, il ne reste plus que des warnings... mais j'aimerais savoir pourquoi.



    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
     
    Main2.cpp: In function `void affiche(const std::vector<T,
       std::allocator<_CharT> >&, const std::string&)':
    Main2.cpp:36: warning: `std::vector<T, std::allocator<_CharT> >::const_iterator
       ' is implicitly a typename
    Main2.cpp:36: warning: implicit typename is deprecated, please see the
       documentation for details
    Main2.cpp:36: warning: `std::vector<T, std::allocator<_CharT> >::const_iterator
       ' is implicitly a typename
    Main2.cpp:36: warning: implicit typename is deprecated, please see the
       documentation for details
    Main2.cpp:36: warning: `std::vector<T, std::allocator<_CharT> >::const_iterator
       ' is implicitly a typename
    Main2.cpp:36: warning: implicit typename is deprecated, please see the
       documentation for details
    J'en perd mon latin....

  2. #2
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Comme te l'indiquent les warnings, à l'intérieur de ta fonction template il faut expliciter le fait que vector<type>::const_iterator est un type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typename vector<type>::const_iterator it, ideb, ifin;

  3. #3
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Hello

    Avec VC++ le code compile (et fonctionne) à condition de remplacer 'type' par 'T' comme dans le prototype.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par bigboomshakala
    Avec VC++ le code compile (et fonctionne)
    C'est en effet un des bugs de VC++6.0. typename est obligatoire ici.


    Citation Envoyé par bigboomshakala
    à condition de remplacer 'type' par 'T' comme dans le prototype.
    Tiens, en voilà un autre que je ne connaissait pas.

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    et pourtant !

    si je laisse le code en l'état :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    error C2065: 'type' : undeclared identifier
            see reference to function template instantiation 'void __cdecl affiche(const class std::vector<int,class std::allocator<int> > &,const class std::basic_string<char,struct std::char_trait
    s<char>,class std::allocator<char> > &)' being compiled
    error C2955: 'vector' : use of class template requires template argument list
            see declaration of 'vector'
            see reference to function template instantiation 'void __cdecl affiche(const class std::vector<int,class std::allocator<int> > &,const class std::basic_string<char,struct std::char_trait
    s<char>,class std::allocator<char> > &)' being compiled
    fatal error C1903: unable to recover from previous error(s); stopping compilation
            see reference to function template instantiation 'void __cdecl affiche(const class std::vector<int,class std::allocator<int> > &,const class std::basic_string<char,struct std::char_trait
    s<char>,class std::allocator<char> > &)' being compiled
    Error executing cl.exe.
    si je change 'type' par 'T', no problemo (me demandez pas pourquoi)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    OK, merci.

    Je n'y avais pas pensé.

+ 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, 13h41
  2. Template - vector - iterator
    Par jmeuf dans le forum Langage
    Réponses: 6
    Dernier message: 30/03/2007, 14h42
  3. Map::iterator et template
    Par kast_or dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 20h15
  4. Template et iterator
    Par bleast8 dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2006, 20h59
  5. Erreur Gcc, template et iterator
    Par aidos dans le forum Langage
    Réponses: 7
    Dernier message: 14/03/2006, 10h04

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