user995624
user995624

Reputation: 27

Error C2440: 'function' : cannot convert from 'node *' to 'node'

I get this error when i try to run the program:

Error C2440: 'function' : cannot convert from 'node *' to 'node'

And i can't figure out what i'm doing wrong when i'm calling the method destroy_node with first_node as argument.

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

Thanks for the help!

Edit:

The whole class and its this code that givs an error: 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;
}

Edit:

Unwind where right i had forgotten to put a prototype in queue.h and i missed that when i went through the program.

Upvotes: 0

Views: 2309

Answers (1)

unwind
unwind

Reputation: 399833

There might be a conflicting prototype; the code as shown shouldn't generate this error. But it also should generate at least a warning since you're calling an unknown function; it would make more sense to put all of destroy_node() before the place where it's called, or add a prototype.

Note that the destroy_node() function is needlessly complex. It could be rewritten as:

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

Upvotes: 3

Related Questions