C语言 为什么我从此结构收到不兼容的指针类型警告?



我很困惑为什么我的代码会收到不兼容的指针类型警告。我的调试器说问题出在行上

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::nextuser_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;

相关内容

  • 没有找到相关文章

最新更新