编译错误:请求非结构或联合中的成员

Posted

技术标签:

【中文标题】编译错误:请求非结构或联合中的成员【英文标题】:compilation error: request for member in something not a structure or union 【发布时间】:2011-09-12 07:28:37 【问题描述】:

编辑: 下面的代码已被修改,以解决问题。

具体来说,(*hardwareList.next_item)->next 最初是不带括号的(例如*hardwareList.next_item->next),编译器不理解。

我正在尝试解决为什么编译器会与我的 C 代码混淆。我正在尝试创建一个链表来存储所有项目以及指向最后一个“下一个”变量的地址的指针,以便于附加。

typedef struct 
  int recordNum;
  char toolName[25];
  int quantity;
  float cost;
 HardwareData;

typedef struct _HardwareListItem
  HardwareData data;
  struct _HardwareListItem* next;
 HardwareListItem;

typedef struct _HardwareList 
  HardwareListItem* items;
  HardwareListItem** next_item;
 HardwareList;

HardwareList readFromFile(FILE* fp)

  char stopReading = 0;
  HardwareList hardwareList = 0;
  hardwareList.next_item = &hardwareList.items;
  do 
    *hardwareList.next_item = (HardwareListItem*)calloc(1, sizeof(HardwareData));
    if (*hardwareList.next_item == NULL)
    
      fprintf(stderr, "OOM Reading File\n");
      fflush(stderr);
      exit(EXIT_FAILURE);
    
    if (fread(&((*hardwareList.next_item)->data), sizeof(HardwareData), 1, fp) != 1) 
      free(*hardwareList.next_item);
      *hardwareList.next_item = NULL;
      stopReading = 1;
     else 
      hardwareList.next_item = &((*hardwareList.next_item)->next);
    
   while(!stopReading);

  return hardwareList;

编译器说:

line 31: error: request for member 'data' in something not a structure or union
line 36: error: request for member 'next' in something not a structure or union

【问题讨论】:

编译器不给行号?错误的编译器... (hardwareList.next_item)->next 不起作用,因为 next_item 不是结构的指针 @QuentinUK:哎呀,我的错。我马上编辑。 @Aaron-Digulla:编译器确实提供了行号,但它们与我复制的内容不匹配。现在用新的行号进行编辑。 在这种情况下,为粘贴的代码添加注释,例如包含错误消息:-) 【参考方案1】:

我猜问题出在这段代码上:*(hardwareList.next_item)->data

next_item 是指向指针的指针,所以我的猜测是编译器将其读取为 *((hardwareList.next_item)->data),这当然不起作用 - 指针在 C 中没有任何成员。

尝试((*(hardwareList.next_item))->data) 以获得正确的取消引用顺序。

【讨论】:

谢谢大家,这让我发疯了,想我怎么弄错了。【参考方案2】:

hardwareList.next_itemHardwareListItem**,所以它上面的运算符-> 返回HardwareListItem*,这显然不是一个结构体。

您使用了太多指针,这令人困惑。尽量简化你的代码,那里有很多错误。

【讨论】:

我尝试过简化(参见上面更新的代码),但仍然很混乱。

以上是关于编译错误:请求非结构或联合中的成员的主要内容,如果未能解决你的问题,请参考以下文章

分配给具有数组类型的表达式并请求非结构或联合中的成员[关闭]

错误:C2016 C 要求结构或联合至少有一个成员

目标 C:在非结构或联合的情况下请求成员 XXX。 (核心数据)

在非结构或联合的事物中请求成员'_file'[关闭]

CoreData 和访问关系的问题:请求非结构或联合中的成员

在非结构或联合的情况下请求成员 tableView