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 :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
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 ;Et le compilateur (Borland 5.5 free) refuse car l'itérateur n'est pas un pointeur sur l'élément listé.
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 ) ; } }
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,
Partager