Intereting Posts
Какой эффективный алгоритм времени для копирования неровных бит-массивов? Как обнаружить нажатия клавиш в программе GUI Linux C без запроса пользователя? Почему стандарт C оставляет неопределенные переменные неопределенными? Помощь, необходимая для написания графического интерфейса в C Побитовое насыщенное добавление в C (HW) Необработанное исключение 0xC0000008: недопустимый дескриптор был указан в динамическом рекомпиляторе Получите размер таблицы Lua в C Как включить внешнюю библиотеку C в windows Использование обратного вызова для отображения имен файлов из внешней декомпрессии dll (Inno Setup) C: Передача переменной количества аргументов из одной функции в другую Перевернутый знак на упакованных SSE-поплавках Objective-C variable … указывает на себя? Где мы можем использовать указатели на функции в C, что используется для указателей функций c / gtk преобразует структуру в тип GtkWindow Написание параллельного быстрого сортировки в c

не имеет ошибки компиляции участника

У меня есть следующий код, и когда я пытаюсь его скомпилировать, я получаю сообщение об ошибке:

error: ‘list_item_t’ не имеет имени с именем ‘state’

Любые творческие идеи, как сделать эту часть кода компилируемой без предупреждений и эррос?

#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); } 

Просто #define ASSERT as

  #if defined (_DEBUG_) #define ASSERT assert #else #define ASSERT( exp ) (void)0 #endif 

Обратите внимание, что это может изменить поведение других кодовых пятен, потому что ASSERT больше не оценивает свой аргумент, но так люди ожидают, что он будет вести себя в любом случае.

Или выполните конструкцию _DEBUG_ , но это не решит проблему, она просто избегает ее.

Ваш class имеет упомянутый член тогда и только тогда, когда _DEBUG_ определен, и, по-видимому, это не так.

#define _DEBUG_

в начале вашего TU или изменить настройки проекта, чтобы определить его каким-либо другим способом

Это связано с

 #define ASSERT( exp ) ((void)(exp)) 

который оценивает p_list_item.state == 0 и, следовательно, нуждается в существовании, даже когда _DEBUG_ не #define ‘d.