我已经构建了一个名为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;
    }
}

我得到错误:从'Women*'分配给'struct Women*'的指针类型不兼容
下一步怎么申报?一定是那种女人

最佳答案

您可以在一个步骤中定义结构和别名。当然,这是合法的,但是类型别名在解析结构成员时是未知的。因此,在解析成员时,类型aliasWomen是未知的。您可能在编写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"

07-28 02:02