n’a pas d’erreur de compilation de membre

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.