C函数使用结构,为什么它不工作?

C函数使用结构,为什么它不工作?,c,struct,malloc,C,Struct,Malloc,我在这个实现中遇到了很多错误 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 stru

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

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

这里有几个不同的问题:

您需要使用指针解引用操作符
->
来访问指向结构的指针的成员。
然后,您需要使用分配给
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;

这里有几个不同的问题:

您需要使用指针解引用操作符
->
来访问指向结构的指针的成员。
然后,您需要使用分配给
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) Employee已经是typedef,因此不需要在malloc语句中使用struct。
2) new是指向struct的指针。所以,通过指针访问struct对象的方式可以是StructPointer->StructObject或*(StructPointer)。StructObject
3) 我看到您试图将tail分配给next,但将tail作为struct对象传递。它必须是一个结构指针。
4) 您应该使用strcpy来复制字符数组。

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

即使你用C写,使用一些流行的C++关键词,比如<代码>新< /C> >有点迷惑。我都没想到。很好,谢谢您使用的是
next
,但是定义了
next
。您不需要声明
employeeCount
。您没有取消对指针的引用:请使用
new->Next
而不是us
new.Next
。首先。哦,您需要返回地址(因为您的函数的类型是
Employee*
),而不是结构本身<代码>返回和尾部员工计数是一个全局变量,因此在前面已初始化。修正了下一个愚蠢的问题。即使你用C写,使用一些流行的C++关键词,比如<代码>新< /C>,有点让人困惑。我都没想到。很好,谢谢您使用的是
next
,但是定义了
next
。您不需要声明
employeeCount
。您没有取消对指针的引用:请使用
new->Next
而不是us
new.Next
。首先。哦,您需要返回地址(因为您的函数的类型是
Employee*
),而不是结构本身<代码>返回和尾部员工计数是一个全局变量,因此在前面已初始化。修复了下一个愚蠢的问题。我得到了这个错误“取消引用指向不完整类型的指针”,哪一行给出了这个错误?你是在编译你的代码,我的建议还是别的什么?还要注意的是,我已经更新了我的答案,以解决代码中的另一个问题。是的,我在struc定义中更改了名称,我犯了一个愚蠢的错误。但是使用你的代码去引用指针我会出错。具体来说,函数中使用它的每一行。想法?顺便说一句,没有
struct Employee
type。。。只要
Employee
@JeffMercado就可以解决这个问题。我想我会从这里拿走剩下的,你们给了我足够的时间。非常感谢你帮我克服了这个障碍,我现在要学习指针了……我得到了一个错误“将指针解引用到不完整类型”,哪一行给了你这个错误?你是在编译你的代码,我的建议还是别的什么?还要注意的是,我已经更新了我的答案,以解决代码中的另一个问题。是的,我在struc定义中更改了名称,我犯了一个愚蠢的错误。但是使用你的代码去引用指针我会出错。具体来说,函数中使用它的每一行。想法?顺便说一句,没有
struct Employee
type。。。只要
Employee
@JeffMercado就可以解决这个问题。我想我会从这里拿走剩下的,你们给了我足够的时间。非常感谢你帮我克服了这个障碍,我现在要学习指针了。。。。