Почему я получаю предупреждение о несовместимом типе указателя из этой структуры? - PullRequest
0 голосов
/ 24 января 2020

Я не понимаю, почему я получаю предупреждение о несовместимом типе указателя из моего кода. Мой отладчик говорит, что проблема со строкой

nodeToInsert->next = *head;

Конкретная строка является частью функции

user_t *moveNameToHead();

Я не знаю, почему эта ошибка возникает, так как оба указателя из типа user_t. Это соответствующий код для проблемы

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NAME_LENGTH 20

typedef struct user {
    char name[NAME_LENGTH];
    int numOfFriends;
    char nameOfFriend[NAME_LENGTH];
    struct node *next; //used for our linked list
} user_t;

//prototypes of functions to be used
void addQueryType();
user_t *createNewNameNode(char *name);
user_t *moveNameToHead();

int main() {
/// some code that eventually calls addQueryType ///
}

void addQueryType() {
char nameOfPersonA[NAME_LENGTH], nameOfPersonB[NAME_LENGTH];

//record names user enters
scanf("%s", nameOfPersonA);
scanf("%s", nameOfPersonB);

user_t *head, *temporary;

temporary = createNewNameNode(nameOfPersonA);
moveNameToHead(&head, temporary);
temporary = createNewNameNode(nameOfPersonB);
moveNameToHead(&head, temporary);


}

//will create nodes for us on a needs basis
user_t *createNewNameNode(char *name) {
    user_t *node = malloc(sizeof(user_t));
    strcpy(node->name, name);
    node->next = NULL;
    return node;
}

//moves newly added name to head of the linked list
user_t *moveNameToHead(user_t **head, user_t *nodeToInsert) {
    nodeToInsert->next = *head;
    *head = nodeToInsert;
    return nodeToInsert;
}

Я пытаюсь создать связанный список с именами пользователей. Имена превращаются в узлы списка, а затем передаются в функцию, которая превращает самое последнее имя в заголовок списка. Проблема в том, что я не знаю, почему я получаю предупреждение о несовместимом типе указателя.

Я пытался изменить * голову на тип символа, думая, что, возможно, это как-то связано с элементами в списке есть имена, но которые вернули ту же ошибку вместе с другими.

Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 24 января 2020

Исправьте опечатку:

typedef struct user {
    char name[NAME_LENGTH];
    int numOfFriends;
    char nameOfFriend[NAME_LENGTH];
    struct user *next; //used for our linked list
} user_t;

Тогда все заработает

0 голосов
/ 24 января 2020

Компилятор выдает вам предупреждение, потому что user_t::next и user_t *head определены как разные типы.

head имеет тип user_t *, в то время как user_t::next имеет тип struct node * , Который кажется неопределенной структурой. Попробуйте изменить user_t::next для определения типа struct user *.

Пример:

typedef struct user {
    char name[NAME_LENGTH];
    int numOfFriends;
    char nameOfFriend[NAME_LENGTH];
    struct user *next; //used for our linked list
} user_t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...