我在这个实现中遇到了很多错误。
typedef struct EmployeeStruct
{
char lastName[MAX_LENGTH];
char firstName[MAX_LENGTH];
int employeeNumber; // Holds the employee's ID. This value is
// equal to the number of employees
struct EmployeeStruct *Next; // Pointer to the next most recently hired Employee
}Employee;
尝试创建一个将返回指向此结构的指针的函数时出现问题。该错误出现在 malloc 调用处,导致"new"未正确声明,因此此函数中的所有行都存在错误。
Employee* hireEmployee(Employee tail, char lastName[MAX_LENGTH], char firstName[MAX_LENGTH])
{
struct Employee *new = (Employee*)malloc(sizeof(Employee));
new.lastName = lastName;
new.firstName = firstName;
new.next = tail;
tail.next = new;
new.employeeNumber = employeeCount;
return tail;
}
以下是错误列表。感谢您的帮助!
lab6.c:19: warning: initialization from incompatible pointer type
lab6.c:20: error: request for member ‘lastName’ in something not a structure or union
lab6.c:21: error: request for member ‘firstName’ in something not a structure or union
lab6.c:22: error: request for member ‘next’ in something not a structure or union
lab6.c:23: error: ‘Employee’ has no member named ‘next’
lab6.c:24: error: request for member ‘employeeNumber’ in something not a structure or union
lab6.c:26: error: incompatible types in return
这里有几个不同的问题:
您需要使用指针取消引用运算符->
来访问指向结构的指针的成员。
然后,您需要使用 strcpy 分配给char
数组。
您需要避免链表中出现循环(您将new
和tail
设置为相互指向next
)。 显而易见的解决方法是将new
设置为新tail
。 可能需要更新调用代码以反映这一点。
最后,您不应该从malloc
投递返回
真的最后,next
应该Next
. 或者,您可以更改结构定义中的大小写。
Employee *new = malloc(sizeof(Employee));
strcpy(new->lastName, lastName);
strcpy(new->firstName, firstName);
new->Next = NULL;
tail->Next = new;
new->employeeNumber = employeeCount;
这里有几件事。
1)员工已经是typedef,所以不需要在malloc语句中使用结构。
2) new 是指向结构的指针。因此,通过指针访问结构对象的方式是StructPointer->StructObject或*(StructPointer)。结构对象
3)我看到您正在尝试将尾巴分配给下一个,但将尾巴作为结构对象传递。它必须是结构指针。4) 你应该使用 strcpy 来复制字符数组。