我建立了一个名为User的结构。
因为我使用的User是几个数据结构,所以该结构仅存储有关用户的数据
typedef struct{
long id;
char *name;
char *surname;
int age;
char gender;
char *username;
char *password;
char *description;
char *hobbies;
}User;
现在我想为女性创建一个链表,所以我创建了
typedef struct{
User *userWoman;
struct Women *next;
}Women;
现在,当我尝试将指针分配给下一个指针时:
void push(Women **head,User *woman){
if((*head)->next == NULL){
(*head) -> userWoman = woman;
}
else{
Women *newWoman = malloc(sizeof(Women));
if (newWoman == NULL){
printf("Allocation of newWoman failed\n");
exit(1);
}
newWoman -> userWoman = woman;
(*head)->next = newWoman;
}
}
我得到了错误:从“女性*”分配给“结构女性*”的指针类型不兼容
接下来我该如何声明?它必须是女性类型
答案 0 :(得分:2)
一步就可以定义一个结构和一个别名。当然,这是合法的,但是在解析结构的成员时类型别名是未知的。因此在解析成员时类型别名Women
是未知的。编写Women *next
时可能会出现编译器错误; struct Women *next
并不会导致编译器错误,但是它被视为不完整类型的前向声明。
为结构命名,并将其用于声明此类型的成员:
typedef struct WomenStruct {
User *userWoman;
struct WomenStruct *next;
} Women;
稍后,Women*
和struct WomenStruct*
将成为同义词,就像您写的一样。
struct WomenStruct {
User *userWoman;
struct WomenStruct *next;
};
typedef struct WomenStruct Women; // let "Women" be an alias for "struct WomenStruct"