编译错误 : request for member in something not a structure or union

标签 c linked-list random-access

编辑: 下面的代码已被修改,可以在问题已解决的情况下工作。

具体来说,(*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)->data

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

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

关于编译错误 : request for member in something not a structure or union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7384581/

相关文章:

java - Java 中的文件流

java - AbstractList.java中RandomAccess的操作

c++ - SFINAE - 检测类型 T 是否是具有随机访问运算符且对于给定值类型的指针、数组或容器

c - 奇怪的返回;返回 int 的函数的行

c - 执行C程序时如何传递文件名

c - 解析二进制数据时使用属性打包的结构

c - 检测链表中的多个循环

java - 如何在java中查找链表中元素的索引之一是否为零

c - 单链表实现问题

c - fwrite 写入大数据失败