c语言中不兼容的结构指针



所以我有这个错误:

.linkedbank.c: In function 'enqueue':
.linkedbank.c:48:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
q->rear->next = temp;

这很奇怪,因为我确定temp与q->rear->next的类型完全相同。我错过什么了吗?这是代码:

#include <stdio.h>
#include <stdlib.h>
//=============STRUCTS=============//
typedef struct{
int data;
struct node* next;
}node;
typedef struct{
node* front;
node* rear;
}queue;
//============PRIMITIVE FUNCS======//
void enqueue(queue* q, int x);
int dequeue(queue* q);
//====Utility Funcs//
queue* createQueue();
void destroyQueue();
int isEmpty(queue* q); //Cannot get full! and O(1) runtime!!!
void displayQueue(queue* q);
//============ FUNCTION DEFINITIONS =====//
void enqueue(queue* q, int x)
{
node* temp = (node*)malloc(sizeof(node));
temp->data = x;
temp->next = NULL;
if(isEmpty(q))
{
q->front = q->rear = temp;  
}else
{
q->rear->next = temp;
q->rear = temp;
}
}
int dequeue(queue* q)
{
node* temp = q->front;
if(isEmpty(q))
{   
fprintf(stderr, "CANNOT DEQUEUE EMPTY QUEUE");
return -1;
}else if(q->front == q->rear)
{
q->front = q->rear = NULL;
}else
{
q->front = q->front->next;
}
return temp->data;      
free(temp);
}
int isEmpty(queue* q){
return (q->front->next == NULL && q->rear->next == NULL);
}

所以你可以看到q->rear和q->front都是(node*), temp也是(node*)如果它们是相同的类型,它们怎么不兼容呢?我很困惑,请帮忙。

typedef struct{
int data;
struct node* next;
}node;

定义了一个匿名结构类型,并将node定义为该类型的名称。但是,您没有定义任何称为struct node的类型。因此,编译器将其理解为某种不透明类型,与node无关,您正在定义指针。

你可能想写typedef struct node { ... } node;,这样你定义的结构体就被称为struct node,node被定义为该类型的另一个名称。

有关更多信息,请参见

typepedef struct与struct定义

为什么在C语言中要如此频繁地定义一个结构体?

相关内容

  • 没有找到相关文章

最新更新