erreur de compilation: demande de membre dans quelque chose de pas une structure ou d'une union

Edit: Le code ci-dessous a été modifié pour qu'il fonctionne comme le problème a été résolu.

Plus précisément, (*hardwareList.next_item)->next a été écrit à l'origine sans crochets (par exemple, comme *hardwareList.next_item->next) et le compilateur ne la comprenait pas.

Je suis en train de faire de l'exercice pourquoi le compilateur est de se confondre avec mon code C. Je suis en train de créer une liste chaînée qui stocke tous les éléments et aussi un pointeur vers l'adresse de la dernière "suivant" variable, pour faciliter l'ajout.

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

Compilateur dit:

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
Le compilateur ne veut pas donner les numéros de ligne? Mauvais compilateur...
(hardwareList.next_item)->suivant ne fonctionne pas comme next_item n'est pas un pointeur sur une struct
Oups, my bad. Je vais modifier en une seconde.
Compilateur ne donner les numéros de ligne mais ils n'auraient pas correspondent à ce que j'ai copié dans.. Édité maintenant, avec de nouveaux numéros de ligne.
Dans ce cas, ajoutez un commentaire à l'collé code comme celui qui contient le message d'erreur 🙂

OriginalL'auteur Adam M-W | 2011-09-12