为什么我会收到"警告:从不兼容的指针类型中分配"?结构数组中的双链表

FIL*_*IaS 1 c arrays warnings linked-list data-structures

我正在尝试实现连接到数组的双链表.使数组的结构包含列表的Head和Tail指针.

typedef struct myStruct{
 int code;
 struct myStruct *Head;
 struct myStruct *Tail;
}myStruct;

myStruct MyArray[10];
Run Code Online (Sandbox Code Playgroud)

这是我的双链表:

struct myList
{
 int data;
 struct myList *previous;
 struct myList *next;
}head;

struct myList *start =NULL;
Run Code Online (Sandbox Code Playgroud)

在下面的代码中我得到了我在帖子标题上写的警告

警告:从不兼容的指针类型分配

void add_neighbor_to_neighborList(struct neighborList *start,int code,int Data)
{ 
 struct myList *newNode = (struct myList *) malloc (sizeof(struct myList ));   /* creates a new node of the correct data size */
 newNode->data = Data;

 if (start == NULL) { /*WARNING!checks to see if the pointer points somewhere in space*/
  MyArray[code].Head=newNode; //WARNING
  newNode->previous=MyArray[code].Head;
 }
 else
 {
  MyArray[code].Tail->next=newNode; /*error: ‘struct myStruct’ has no member named ‘next’*/
  newNode->previous=MyArray[code].Tail; //WARNING
 }
 /*if (newNode == NULL){ 
  return NULL;
  }*/
 MyArray[code].Tail=newNode; //WARNING
 newNode->next=MyArray[code].Tail;  //WARNING

 //return *start;
}
Run Code Online (Sandbox Code Playgroud)

我正在看这么多时间,但仍然无法找到什么错误以及我应该纠正什么.如果您有任何想法,我将不胜感激!无论如何/提前谢谢!;)

Ber*_*ron 11

MyArray[code].Head=newNode; //WARNING
Run Code Online (Sandbox Code Playgroud)

MyArray[code].Head的类型是struct myStruct *.

newNode的类型是struct myList *.

struct myStruct *struct myList *指向两种不同的类型,它们是不兼容的,这就是编译器告诉你的.


你可能希望你的struct myStruct定义如下:

typedef struct myStruct{
 int code;
 struct myList *Head;
 struct myList *Tail;
} myStruct;
Run Code Online (Sandbox Code Playgroud)

我建议你使用更明确的类型名称,这样就不会发生这样的错误.

您可以重命名struct myStructstruct myList并重命名struct myListstruct myNode.因为它们是,或者似乎是.