Like a cascade & # 8594; operator?

I have the following:

typedef struct Node_struct
{
    int number;
    Node *nextNode;
    Node *prevNode;
} Node;

and later

Node *nodeInSet = lookup(set, number);
nodeInSet->nextNode = (Node *) malloc(sizeof(Node));
nodeInSet->nextNode->prevNode

the last line says: "the expression must be of type pointer to the class." I do not see how my code is wrong. Since it nodeInSet->nextNodeis Node *, I think, I should be allowed to write nodeInSet->nextNode->prevNode. What doesn't work here?

+4
source share
2 answers

Members prevNodeand nextNodehave an incomplete type, you should write it as follows:

typedef struct Node_struct
{
    int number;
    struct Node_struct *nextNode;
    struct Node_struct *prevNode;
} Node;

or

typedef struct Node_struct Node;
struct Node_struct
{
    int number;
    Node *nextNode;
    Node *prevNode;
};

The reason is that you can declare a poniter an incomplete type, but if you try to dereference a pointer, for example, when you use an operator ->, then the type must be known, because the size of this type is necessary.

+6
source

You can change your code to this.

typedef struct Node_struct
{
    int number;
    struct Node_struct *nextNode;
    struct Node_struct *prevNode;
} Node;
+3
source

All Articles