【发布时间】: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:编译器确实提供了行号,但它们与我复制的内容不匹配。现在用新的行号进行编辑。
-
在这种情况下,为粘贴的代码添加注释,例如包含错误消息:-)
标签: c linked-list random-access