没有成员编译错误

时间:2011-07-10 14:07:55

标签: c linux gcc gcc-warning

我有以下代码,当我尝试编译它时,我收到一个错误:

  

错误:'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);
}

3 个答案:

答案 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存在。