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 :

[cast] dans le cas d'une Std::list


Sujet :

SL & STL C++

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut [cast] dans le cas d'une Std::list
    salut à tous,

    l'erreur :
    error C2440: 'cast de type'*: impossible de convertir de 'std::list<_Ty>::iterator' en 'CInstance' with [_Ty=CInstance]

    mes definitions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef std::list<CInstance> type_listOfInstances;//mon type de list
    	type_listOfInstances m_Instances;						//ma liste d instances
     
    	type_listOfInstances::iterator m_InstanceIterator;		//un iterateur sur ma liste
    mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    m_InstanceIterator=m_Instances.begin();
    for(m_InstanceIterator;m_InstanceIterator!=m_Instances.end();m_InstanceIterator++)
    {
    	if (m_InstanceIterator->GetID()==_iNoInstance)
    	{
    	//suppresion de l'instance dans la liste
             m_Instances.erase(m_InstanceIterator);
    	delete (CInstance) m_InstanceIterator;//ERREUR C2440
     
    	return;
    	}			
    }
    comment faire pour bien caster afin de supprimer l instance de la liste ??
    Pour les details, cherche tout seul !

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    résolu ! il me manquait un &
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete  &m_InstanceIterator;
    Pour les details, cherche tout seul !

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh... J'avoue que j'ai des doutes, là...
    C'est on iterator sur la pile, que tu essayes d'effacer là...


    Ta liste est une liste d'objets, non de pointeurs: Je ne pense pas que delete marche avec ce type de liste.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Médinoc
    Euh... J'avoue que j'ai des doutes, là...
    C'est on iterator sur la pile, que tu essayes d'effacer là...


    Ta liste est une liste d'objets, non de pointeurs: Je ne pense pas que delete marche avec ce type de liste.
    Non en fait il n'y a pas besoin de détruire l'objet, vu qu'il s'agit d'un objet et non d'un pointeur, il est détruit au cours de l'opération erase, de manière automatique puisqu'il sort du scope.

  5. #5
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Et indexer ta liste par des IDs ça te semble pas plus pertinent ?
    Boost ftw

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pour supprimer l'élément de la liste, c'est plutôt un list.erase(pos) ?

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Miles
    Pour supprimer l'élément de la liste, c'est plutôt un list.erase(pos) ?
    Oui et c'est ce qu'il fait. Après lui veut également détruire l'objet, alors que cela n'est pas nécessaire s'il s'agit d'une liste d'objets et non de pointeurs.

    Par contre je ne crois pas que l'itérateur soit mis à jour lorsqu'un élément est retiré de la liste, du coup le code risque de bugger (l'itérateur se retrouve après la fin de la liste au bout d'un moment :s).

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par bolhrak
    Oui et c'est ce qu'il fait. Après lui veut également détruire l'objet, alors que cela n'est pas nécessaire s'il s'agit d'une liste d'objets et non de pointeurs.
    Ah oui, je n'avais même pas vu... Donc il essaie d'effacer un objet non alloué sur le tas... Gros crash en perspective.

  9. #9
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    en effet le delete est inutile dans cet ECM!

    Mais j avais simplifier mon code pour produire cet ECM.
    Dans ma version definitive ma list contient des ptr d'objet.

    merci a tous
    a+
    Pour les details, cherche tout seul !

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ce n'est pas une question d'inutilité, il y est dangereux.
    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. Réponses: 2
    Dernier message: 24/06/2008, 09h46
  2. [2K5]Colations dans le cas d'une localisation européenne
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/05/2008, 15h24
  3. Recherche dans une std::list et suppression.
    Par Nyko17 dans le forum SL & STL
    Réponses: 5
    Dernier message: 02/05/2008, 12h53
  4. calcul préavis dans le cas d'une période d'essai renouvelée
    Par benlabasse dans le forum Démission
    Réponses: 6
    Dernier message: 22/02/2008, 14h18
  5. DRY dans le cas d'une relation 1-N
    Par titoumimi dans le forum Ruby on Rails
    Réponses: 15
    Dernier message: 02/05/2007, 05h48

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