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

C++ Discussion :

class list : récupérer un pointeur à partir de l'iterateur


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Par défaut class list : récupérer un pointeur à partir de l'iterateur
    Bonjour,

    Je pense que c'est une question simple mais je sèche dessus, et je n'ai pas trouvé dans la FAQ. Je veux créer une "list" d'élements définis comme étant de type "struct". Voici les typedef correspondants et l'instanciation de la 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
    /* Create structure for useful SIGNAL related information */
    typedef struct T_Signals
    {
        BuiltInDTypeId          eSLType ;                   // enumerated type, as defined in simstruct_types.h (SS_UINT8, etc...)
        uint_T                  naDim[2] ;                  // number of values in each dimension
        double                  dSlope ;                    // phys_val = num_val * dSlope + dBias
        double                  dBias ;                     // ... idem...
        void *                  pAddress ;                  // address of the variable, pointer type depends on variable type (u8, u16, s8, etc...)
        int                     nIdxSignalsTable ;          // index in the calibration array (rtwCAPI_GetModelParameters(MMI))
        std::string             strModule ;                 // the module in which it is produced
    } t_Signals ;
     
    /* Define the list of logged signals as a simple list (don't need the name & don't want to sort) */
    typedef std::list<t_Signals>              t_ListSignals ;
    /* Define the iterator type for the list of logged signals */
    typedef t_ListSignals::iterator           t_ListSignalsIterator ;
     
    /* Create the list of all logged signals */
    t_ListSignals                             ListLoggedSignals ;
    Ensuite je remplis ma liste, par copie succesive, avec une instance locale de t_Signals dont je renseigne les champs (la liste est petite et créée en une seule fois, la copie n'est pas un pb). Lorsque j'utilise la liste, je dois récupérer un pointeur sur l'élément listé (la structure) pour le passer à une fonction :
    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
    // prototype :
    double GetSignalValuePhys(const t_Signals * const psig, int offset) ;
     
    // code in the main loop :
    unsigned int j ;
    t_ListSignalsIterator  iSignal ;
    double d ;
     
    for ( iSignal = ListLoggedSignals.begin() ; iSignal != ListLoggedSignals.end() ; iSignal++ )
    {
        for ( j = 0 ; j < (iSignal->naDim[0]*iSignal->naDim[1]) ; j++ )
        {
            d = GetSignalValuePhys(iSignal, j  ) ;
        }
    }
    Et le compilateur (Borland 5.5 free) refuse car l'itérateur n'est pas un pointeur sur l'élément listé.
    Comment je peux récupérer un pointeur valide sur l'élément listé ? J'aimerai mieux ne pas devoir faire une copie cette fois...
    NB : j'ai aussi un doute sur le fait que la mémoire sera bien allouée lors d'insertions d'éléments dans la liste, ou libérée lors du clear de la liste...

    Merci,

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pour prendre l'adresse d'un élément pointé par un itérateur it, il faut utiliser &*it.

    Pense aussi à utiliser un const_iterator plutôt qu'un iterator, si tu ne vas le passer qu'en tant que pointeur constant.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Par défaut
    Incroyable ! j'aurai jamais pensé à essayer...
    Merci pour la réponse rapide !

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

Discussions similaires

  1. Récupérer un pointeur sur une classe Singleton
    Par slake13 dans le forum Débuter
    Réponses: 7
    Dernier message: 18/11/2008, 17h01
  2. récupérer une session à partir d'une classe DAO
    Par cotede2 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/10/2008, 10h19
  3. Réponses: 4
    Dernier message: 03/06/2008, 18h20
  4. Réponses: 3
    Dernier message: 09/06/2007, 17h13
  5. Réponses: 14
    Dernier message: 14/03/2005, 09h16

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