2011-11-29 75 views
0

當我嘗試運行該程序中,我得到這個錯誤:錯誤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當我通過這個程序時我錯過了。

+0

'c2440'標籤是什麼意思? – INS

+1

很可能您沒有向我們展示*實際*代碼。 –

+0

對於帶有'destroy_node'調用的行是否真的出錯? –

回答

3

可能存在相互衝突的原型;所示的代碼不應該產生這個錯誤。但是,由於你正在調用一個未知的函數,它也應該至少產生一個警告;將所有destroy_node()放在之前的地方更有意義,或者添加原型。

請注意,destroy_node()函數是不必要的複雜。它可以被改寫爲:

static int destroy_node(node *node_ref) 
{ 
    free(node_ref); 
    return node_ref == NULL; 
} 
+0

Im在程序的其他部分使用destroy_node,並且只有在方法出列時纔會產生錯誤。 – user995624

相關問題