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,