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

时间:2010-10-27 23:46:19

标签: c arrays data-structures warnings linked-list

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

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

myStruct MyArray[10];

这是我的双链表:

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

struct myList *start =NULL;

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

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

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

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

3 个答案:

答案 0 :(得分:11)

MyArray[code].Head=newNode; //WARNING

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;

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

您可以将struct myStruct重命名为struct myList,并将struct myList重命名为struct myNode。因为它们是,或者似乎是。

答案 1 :(得分:0)

您有两种不同的类型,myStructstruct myList。它们的类型不同(尽管它们以相同的顺序包含相同类型的类型)。使用其中一种。

数组MyArray属于myStruct,其中包含指向struct myStruct的指针。您正在尝试为这些指针分配指向struct myList的指针。因此警告不一样。

答案 2 :(得分:0)

您正在尝试将myList指针指定给需要myStruct指针的内容。你不能这样做。

A* pA;
B *pB;

pB = pA; // Can't do this without casting