當我嘗試運行該程序中,我得到這個錯誤:錯誤C2440:「功能」:無法從「節點*」轉換爲「節點」
Error C2440: 'function' : cannot convert from 'node *' to 'node'
,我無法弄清楚什麼我」當我調用first_node作爲參數的方法destroy_node時,做錯了。
int dequeue(int *data)
{
node *first_node;
int result = 0;
if(queueref.first != NULL){
first_node = queueref.first;
data = (int*) queueref.first->data;
queueref.first = first_node->next;
result = destroy_node(first_node);
}
return result;
}
static int destroy_node(node *node_ref)
{
int data = 0;
free(node_ref);
if(node_ref == NULL){
data = 1;
}
return data;
}
感謝您的幫助!
編輯:
全班及其這段代碼GIVS錯誤:result = destroy_node(first_node);
#include <stdlib.h>
#include <stdio.h>
typedef struct node {
int data;
struct node *next;
} node;
typedef struct {
struct node *first;
struct node *last;
} queue_c;
static queue_c queueref;
//Funktionsprototyper
#include "queue.h"
static int destroy_node(node node_ref);
static node *create_node(int data);
int enqueue(int data)
{
node *new_node, *last_node;
int result = 0;
new_node = create_node(data);
if(new_node != NULL){
if(queueref.first != NULL){
queueref.first = new_node;
queueref.last = new_node;
}
else{
queueref.last->next = new_node;
queueref.last = new_node;
}
result = 1;
}
return result;
}
static node *create_node(int data)
{
node *noderef;
noderef = (node*) malloc(sizeof(node));
noderef->data = data;
noderef->next = NULL;
return noderef;
}
int dequeue(int *data)
{
node *first_node;
int result = 0;
if(queueref.first != NULL){
first_node = queueref.first;
data = (int*) queueref.first->data;
queueref.first = first_node->next;
result = destroy_node(first_node);
}
return result;
}
static int destroy_node(node *node_ref)
{
free(node_ref);
return node_ref == NULL;
}
void print_queue()
{
node *curr_ptr = queueref.first;
if(curr_ptr != NULL){
while(curr_ptr != NULL){
printf("%d -> ", curr_ptr->data);
curr_ptr = curr_ptr->next;
}
}
else{
printf("Kön är tom!");
}
}
int delete_node(int data)
{
int result = 0;
node *curr_ptr;
node *prev_ptr;
node *temp_ptr;
if(queueref.first == NULL){
printf("Kön är tom!");
}
else if(queueref.first->data == data){
temp_ptr = queueref.first;
queueref.first = queueref.first->next;
result = destroy_node(temp_ptr);
}
else{
prev_ptr = queueref.first;
curr_ptr = queueref.first->next;
while(curr_ptr != NULL){
if(curr_ptr->data == data){
result = 1;
break;
}
prev_ptr = curr_ptr;
curr_ptr = curr_ptr->next;
}
if(result){
temp_ptr = curr_ptr;
prev_ptr->next = temp_ptr->next;
result = destroy_node(temp_ptr);
}
else{
printf("Ingen node innehöll talet: %d", data);
}
}
return result;
}
編輯:
中放鬆身心右我忘了把原型queue.h當我通過這個程序時我錯過了。
'c2440'標籤是什麼意思? – INS
很可能您沒有向我們展示*實際*代碼。 –
對於帶有'destroy_node'調用的行是否真的出錯? –