J’ai le code suivant et quand j’essaye de le comstackr, j’obtiens une erreur:
erreur: ‘list_item_t’ n’a pas de membre nommé ‘state’
Des idées créatives comment faire pour que cette partie de code soit compilée sans avertissements ni erreurs?
#if defined (_DEBUG_) #define ASSERT assert #else /* _DEBUG_ */ #define ASSERT( exp ) ((void)(exp)) #endif` typedef struct list_item { struct list_item *p_next; struct list_item *p_prev; #ifdef _DEBUG_ int state; #endif } list_item_t; main(int argc, char *argv) { list_item_t p_list_item; ASSERT(p_list_item.state == 0); }
Juste #define
ASSERT
as
#if defined (_DEBUG_) #define ASSERT assert #else #define ASSERT( exp ) (void)0 #endif
Notez que cela peut changer le comportement des autres tâches de code car ASSERT
plus son argument, mais c’est ce que les gens attendent de toute façon.
Ou effectuez une _DEBUG_
, mais cela ne résout pas le problème, il l’évite simplement.
Votre classe a le membre mentionné si et seulement si _DEBUG_
est défini, et ce n’est apparemment pas le cas.
#define _DEBUG_
au début de votre TU ou modifier les parameters du projet pour le définir d’une autre manière
Cela est dû à
#define ASSERT( exp ) ((void)(exp))
qui évalue p_list_item.state == 0
et a donc besoin que l’ state
existe même lorsque _DEBUG_
n’est pas #define
‘d.