我有以下代码,当我尝试编译它时,我收到一个错误:
错误:'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);
}
答案 0 :(得分:3)
只需#define
ASSERT
#if defined (_DEBUG_)
#define ASSERT assert
#else
#define ASSERT( exp ) (void)0
#endif
请注意,这可能会改变其他代码点的行为,因为ASSERT
不再评估其参数,但这就是人们期望它的行为方式。
或执行_DEBUG_
版本,但这不能解决问题,只是避免了它。
答案 1 :(得分:2)
当且仅当_DEBUG_
被定义时,您的类才具有所提及的成员,而且显然不是。{
#define _DEBUG_
在您的TU开头或更改项目设置以其他方式定义
答案 2 :(得分:2)
这是由于
#define ASSERT( exp ) ((void)(exp))
评估p_list_item.state == 0
,因此即使state
不是_DEBUG_
',也需要#define
存在。