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

SL & STL C++ Discussion :

pb avec iterateur const sur une list STL


Sujet :

SL & STL C++

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut pb avec iterateur const sur une list STL
    Bonjour, j'ai une petite question technique, je ne comprends absolument pas ce que me fait mon compilo ! (CL de Visual C++ 2005).

    J'ai une classe qui contient un membre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::list< unsigned char > m_o_allowed_letters ;
    Puis j'ai une fonction membre constante qui vise simplement a retourner si une lettre se retrouve dans ma liste :

    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
     
    bool
    TSquare::Is_Allowed_Letters( unsigned char par_uc_letter ) const
    {
    	if ( *m_o_allowed_letters.begin() == ALLOW_ALL_LETTERS )
    	{
    		return true ;
    	}
     
    	for ( std::list<unsigned char>::const_iterator	
                            loc_o_iterator = m_o_allowed_letters.begin() ;
    			loc_o_iterator != m_o_allowed_letters.end() ;		                              
                            loc_o_iterator++ )
    	{
    		if ( *loc_o_iterator == par_uc_letter )
    		{
    			return true ;
    		}
    	}
     
    	return false ;
    }
    Et j'ai une erreur super bizarre renvoyée par CL :

    d:\programmation\visual studio 8\vc\include\xutility(572) : error C2039: 'iterator_category' : n'est pas membre de 'std::list<_Ty>'
    with
    [
    _Ty=unsigned char
    ]
    J'ai inclu <list> mais qu'ai-je oublié ?
    Je ne peux pas faire d'iterateur constant sur une liste ? La STL me certifie que si !!
    Je tiens à préciser que d'un autre coté si je n'utilise pas d'iterateur constant cela me créer d'autres erreurs puisque ma fonction est constante. De plus conceptuellement comme je ne modifie pas les données de ma liste je n'ai aucune raison de ne pas prendre un itérateur constant.

    Merci pour votre aide !

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Bonjour,

    Excusez moi, avec cette erreur dans xutility, j'estimais mal l'endroit de mon plantage à la compilation finalement ! Ca ne plante pas du tout dans cette fonction, d'ailleurs celle-ci est bonne !

    La fonction qui plante est simplement une fonction de recopie d'une liste dans la liste membre de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	// The first element of the list is always ALLOW_ALL_LETTERS in its initial state
    	if( *m_o_allowed_letters.begin() == ALLOW_ALL_LETTERS )
    	{
    		// Remove the fact the square can contain all letters
    		m_o_allowed_letters.pop_back() ;
    	}
     
    	// Copy the allowed letter list to the square one
    	std::copy( par_o_allowed_letters.begin(), par_o_allowed_letters.end(), m_o_allowed_letters ) ;
    C'est là que ca plante. J'ai pas encore analysé pourquoi on peut pas passer par copy de <algorithm> pour recopier deux listes. Apparemment les types d"itérators prisent en charge par "copy" ne sont pas ceux des lists, ou une connerie du genre !

    Merci de votre aide si vous trouvez avant moi !
    Bye.
    Alex

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Oups désolé encore, j'ai fait ma boulette ! Ca fonctionne finalement sans cet oubli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::copy( par_o_allowed_letters.begin(), par_o_allowed_letters.end(), m_o_allowed_letters.begin() ) ;
    Eh oui, il manquait le .begin(), mais l'erreur tellement explicite me faisait chercher ailleurs sur des types d'iterateurs contants... !!! N'importe quoi !
    Bye.

  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 : 49
    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
    Apprendre à décrypter les erreurs de son compilateur fait certainement partie des tâches les plus ardues qui parsèment l'apprentissage du C++...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Tout a fait !
    Surtout quand on se colle à des erreurs qui sont levées par le biais de template dans des classes que l'on ne connait pas, comme celles de la STL (qui sont par franchement des plus evidentes à comprendre !!!).

    Bye !
    A la prochaine.

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

Discussions similaires

  1. [SP-2010] Appliquer deux filtres avec un ou sur une liste sharepoint
    Par soukaouta dans le forum SharePoint
    Réponses: 1
    Dernier message: 21/05/2013, 10h45
  2. Iterateur sur une list
    Par Atharendil dans le forum SL & STL
    Réponses: 17
    Dernier message: 13/01/2008, 15h59
  3. [List] Iterateur sur une liste de type défini
    Par Wookai dans le forum SL & STL
    Réponses: 4
    Dernier message: 12/11/2007, 20h45
  4. Réponses: 8
    Dernier message: 30/09/2006, 05h18
  5. Réponses: 3
    Dernier message: 06/09/2006, 18h59

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