0

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

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
4

2 回答 2

4

这里有几个不同的问题:

您需要使用指针取消引用运算符->来访问指向您的结构的指针的成员。
然后,您需要使用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;
于 2013-10-25T21:29:34.040 回答
0

这里有几件事。
1)Employee已经是typedef,所以不需要在malloc语句中使用struct。
2) new 是一个指向结构的指针。因此,通过指针访问 struct 对象的方法是 StructPointer->StructObject 或 *(StructPointer).StructObject
3) 我看到您正在尝试将 tail 分配给 next 但将 tail 作为 struct 对象传递。它必须是一个 StructPointer。4) 你应该使用 strcpy 来复制字符数组。

于 2013-10-28T10:00:47.040 回答