错误C2440:'function':无法从'node *'转换为'node'

时间:2011-11-29 12:22:00

标签: c

当我尝试运行程序时出现此错误:

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

感谢您的帮助!

编辑:

整个类及其代码发出错误: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的地方展开,当我完成整个程序时我错过了。

1 个答案:

答案 0 :(得分:3)

可能存在冲突的原型;显示的代码不应生成此错误。但它也应该至少产生一个警告,因为你正在调用一个未知函数;将所有destroy_node() 放在之前调用它的地方或添加原型会更有意义。

请注意,destroy_node()函数不必要地复杂。它可以改写为:

static int destroy_node(node *node_ref)
{
  free(node_ref);
  return node_ref == NULL;
}
相关问题