Edit: The code below has been modified to work as the problem has been resolved.
In particular, (*hardwareList.next_item)->next was originally written without brackets (for example, as *hardwareList.next_item->next ), and the compiler did not understand this.
I am trying to train why the compiler gets confused with my C code. I am trying to create a linked list that stores all the items, as well as a pointer to the address of the last variable "next" for easy addition.
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; }
The compiler says:
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
Adam MW
source share