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

MFC Discussion :

Modification d'un élément dans une CList


Sujet :

MFC

  1. #1
    Nouveau membre du Club Avatar de nmarf
    Inscrit en
    Mai 2003
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 92
    Points : 39
    Points
    39
    Par défaut Modification d'un élément dans une CList
    Bonjour à tous,

    J'ai une CList de CLogManager (classe maison) définie comme il suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CList<CLogManager, CLogManager&> m_logs;
    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
     
    class CLogManager
    {
    public:
    [...]
        void SetDividers(double fCrossWebDivider, double fDownWebDivider);
    [...]
     
    private:
    [...]
        double m_fDownWebDivider;
        double m_fCrossWebDivider;
    };
     
     
    void CLogManager::SetDividers(double fCrossWebDivider, double fDownWebDivider)
    {
        m_fDownWebDivider = fDownWebDivider;
        m_fCrossWebDivider = fCrossWebDivider;
    }
    J'essaie de modifier les deux doubles de chaque élément de la liste par la fonction SetDividers() mais aucune modification n'est prise en compte.
    Je fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CMultipleLogsManager::SetDividers(double fCrossWebDivider, double fDownWebDivider)
    {    
        POSITION pos = m_logs.GetHeadPosition();
     
        while (pos != NULL)
        {
            CLogManager& logTmp = m_logs.GetNext(pos);
            logTmp.SetDividers(fCrossWebDivider,fDownWebDivider);
        }
    }
    Il semblerait que le problème soit logTmp qui finalement n'est qu'une copie de l'élément de la liste, mais alors, comment récupérer un pointeur sur chaque élément pour pouvoir faire les modifs ?

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    bizarre ton probleme:
    CList::GetNext

    TYPE& GetNext( POSITION& rPosition );
    TYPE GetNext( POSITION& rPosition ) const;
    Return Value
    If the list is const, GetNext returns a copy of the element at the head of the list. This allows the function to be used only on the right side of an assignment statement and protects the list from modification.
    If the list is not const, GetNext returns a reference to an element of the list. This allows the function to be used on either side of an assignment statement and thus allows the list entries to be modified.



  3. #3
    Nouveau membre du Club Avatar de nmarf
    Inscrit en
    Mai 2003
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    Oui, j'ai vu ça aussi dans la MFC.
    Ma CList n'est pas constante, des éléments sont rajoutés et déplacés dans d'autres fonctions.

  4. #4
    r0d
    r0d est actuellement connecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Personellement, je préfère utiliser des pointeurs dans mes listes. Du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CList<CLogManager*, CLogManager*> m_logs;
    L'avantage c'est que justement, il n'y a pas d'ambiguité sur pointeur/non pointeur. On sait qu'il s'agit de pointeur. Et puis on n'est pas obligé de créer un constructeur de recopie et un operateur =.
    Enfin, c'est mon point de vue, peut-être y a-t-il des implications que je ne vois pas.

  5. #5
    Nouveau membre du Club Avatar de nmarf
    Inscrit en
    Mai 2003
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    r0d > je vais essayer de modifier avec des pointeurs, sinon je changerai toutes les CList de ce code qui n'est pas le mien par des vector<> et des list<> que je préfère largement.

Discussions similaires

  1. contrôler l'absence d'un élément dans une liste donnée
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2005, 10h02
  2. ajout éléments dans une balise select
    Par wehtam dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/08/2005, 14h03
  3. [CR 10] Centrer verticalement un élément dans une boîte
    Par Giovanny Temgoua dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 07/04/2005, 14h25
  4. Modif d'un ini dans une combo box
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/04/2005, 23h39

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