Question

I have some errors to my code and I still don't understand why it does not work.

I have the following code snippet:

void insertBefore(List *lista, Node **node, Node *newNode)
{
    newNode->prev = (*node)->prev;
    newNode->next = (*node);
    if((*node)->prev == 0)
        lista->first = newNode;
    else
        (*node)->prev->next = newNode;
    (*node)->prev = newNode;
}

And I call it as:
insertBefore(lista,lista->first, newNode);

And the error is :

error: dereferencing pointer to incomplete type

What I tried and works(no errors but crashes when I debug):

void insertBefore(List *lista, Node **node, Node *newNode)
    {
        Node *anotherNode = (*node)->prev;
        newNode->prev = (*node)->prev;
        newNode->next = (*node);
        if((*node)->prev == 0)
            lista->first = newNode;
        else
            anotherNode->next = newNode;
        (*node)->prev = newNode;
    }

Here are the structures I use:

typedef struct NodeT
{
    struct nodeT *prev;
    struct nodeT *next;
    int key;
}Node;
typedef struct ListT
{
    Node *first;
    Node *last;
    Node *current;
}List;

Now, my question is: is there any issue when the compiler parses? I really don't figure it out.

Was it helpful?

Solution

Watch the capitalization!

typedef struct NodeT      /* uppercase N */
{
    struct nodeT *prev;   /* lowercase N */

NodeT and nodeT are different identifiers

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top