我很困惑为什么我的代码会收到不兼容的指针类型警告。我的调试器说问题出在行上
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;
}
我正在尝试使用用户名创建链表。这些名称被转换为列表的节点,然后被馈送到一个函数中,该函数将最新的名称转换为列表的头部。问题是我不知道为什么我会收到不兼容的指针类型警告。
我尝试将 *head 更改为 char 类型,认为这可能与它有关,因为列表中的项目是名称,但这与其他项目一起返回了相同的错误。
对此问题的任何帮助将不胜感激。
更正拼写错误:
typedef struct user {
char name[NAME_LENGTH];
int numOfFriends;
char nameOfFriend[NAME_LENGTH];
struct user *next; //used for our linked list
} user_t;
然后它工作
编译器会向您发出警告,因为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;