【发布时间】:2021-02-10 21:23:10
【问题描述】:
我只写了函数,编译的时候总是出现这些错误。
我知道问题出在queue->arr[queue->rear]=item。但是我已经在Queue中定义了我的queue->arr为Node*,为什么代码仍然是错误的?
[Error] incompatible types when assigning to type 'struct Node' from type 'struct Node *'
[Error] incompatible type for argument 1 of 'insertValue'
[Note] expected 'struct Node *' but argument is of type 'struct Node'
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Queue{
int rear;
int front;
int size;
int capacity;
struct Node* arr;
};
struct Node* newNode(int item){
struct Node* node=(struct Node*) malloc(sizeof(struct Node));
node->left= NULL;
node->right=NULL;
node->data= item;
return node;
}
struct Queue* creatQ()
{
struct Queue* queue= (struct Queue*)malloc(sizeof(struct Queue*));
queue->rear=0;
queue->front=0;
queue->size=0;
queue->capacity= MAXQUEUE;
queue->arr=(struct Node*)malloc(queue->capacity*sizeof(struct Node));;
return queue;
}
void push(struct Queue* queue, struct Node* item)
{
if(queue->rear==(MAXQUEUE-1)){
printf("Queue full\n");
}
else{
queue->rear= (queue->rear+1)%queue->capacity;
queue->arr[queue->rear]=item;
queue->size++;
}
}
struct Node pop(struct Queue* queue)
{
struct Node item;
if (queue->size==0){
printf("Empty queue\n");
}
else{
item=queue->arr[queue->front];
queue->front= (queue->front+1)%queue->capacity;
queue->size--;
return item;
}
}
struct Node front(struct Queue* queue)
{
struct Node item;
if(queue->size!=0){
item=queue->arr[queue->front];
return item;
}
}
struct Node* insertValue(struct Node* root, int value, struct Queue* queue)
{
struct Node* node= newNode(value);
struct Node item= front(queue);
if (root==NULL){
root=node;
}
else if(item.left==NULL){
item.left=node;
}
else {
item.right=node;
pop(queue);
}
push(queue, node);
return root;
}
【问题讨论】:
-
你知道
queue->arr[queue->rear]和*(queue->arr + queue->rear)是一样的吗? -
欢迎使用 stackoverflow。请先拨打tour,以便了解该网站的运作方式。
-
"但是我已经将我的队列->arr 定义为 Node*" 是的,完全正确。这意味着
queue->arr[x]的类型是struct Node,而不是struct Node* -
你可能想要
queue->arr[queue->rear] = *item;而不是queue->arr[queue->rear] = item; -
第二个错误不是你显示的代码引起的。这是由您未显示的对
insertValue的函数调用引起的。
标签: c pointers struct binary-tree binary-search-tree