我有以下内容:
typedef struct Node_struct
{
int number;
Node *nextNode;
Node *prevNode;
} Node;
以后
Node *nodeInSet = lookup(set, number);
nodeInSet->nextNode = (Node *) malloc(sizeof(Node));
nodeInSet->nextNode->prevNode
最后一行是说:“表达式必须具有指向类的指针”。我看不出我的代码是怎么回事。由于nodeInSet->nextNode
是Node *
,我认为应该允许我写nodeInSet->nextNode->prevNode
。什么在这里不起作用?
答案 0 :(得分:6)
prevNode
和nextNode
成员的类型不完整,您必须像这样写
typedef struct Node_struct
{
int number;
struct Node_struct *nextNode;
struct Node_struct *prevNode;
} Node;
或
typedef struct Node_struct Node;
struct Node_struct
{
int number;
Node *nextNode;
Node *prevNode;
};
原因是您可以将poniter声明为不完整的类型,但是如果您尝试取消引用指针,就像使用->
运算符一样,那么必须知道类型,因为需要类型。
答案 1 :(得分:3)
您可以将代码更改为此。
typedef struct Node_struct
{
int number;
struct Node_struct *nextNode;
struct Node_struct *prevNode;
} Node;