使用结构体的C函数,为什么它不起作用



我在这个实现中遇到了很多错误。

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数组。
您需要避免链表中出现循环(您将newtail设置为相互指向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 来复制字符数组。

相关内容

  • 没有找到相关文章

最新更新