Назначение указателя на следующий узел в списке - PullRequest
0 голосов
/ 30 декабря 2018

Я построил структуру под названием «Пользователь».

Поскольку я использую пользовательские несколько структур данных, структура хранит только данные о пользователе

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;
    }
}

Я получаю ошибку: несовместимые типы указателей, назначаемые для'struct Women *' из 'Women *'

Как я могу объявить следующее?это должно быть типа женщин

1 Ответ

0 голосов
/ 30 декабря 2018

Вы определяете структуру и псевдоним за один шаг.Конечно, это допустимо, но псевдоним типа не известен во время анализа членов структуры.Таким образом, псевдоним Women неизвестен во время анализа членов.Возможно, вы получили ошибку компилятора при записи Women *nextstruct 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...