C 如何级联->;操作人员

C 如何级联->;操作人员,c,pointers,dereference,C,Pointers,Dereference,我有以下资料: 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 最后一行是:“表达式必须有

我有以下资料:

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
。什么在这里不起作用?

prevNode和
nextNode
成员的类型不完整,您必须这样编写

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


原因是您可以将poniter声明为不完整的类型,但是如果您尝试取消引用指针,例如使用
->
运算符时,则必须知道该类型,因为需要该类型的大小。

您可以将代码更改为该类型

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

我还怀疑您使用了错误的编译器。你可以写,但你真的不应该写。从样本代码中无法说出错误发生的原因,您可以发布一个可复制的样本吗?另外,
nodeInSet->nextNode->prevNode
不是
nodeInSet
?如果列表已正确填充。在
Node\u struct
内部,尚未定义
typedef节点
,因此应声明
struct Node\u struct*nextNode
结构定义不应为typedef'd。类型定义会使代码变得混乱,导致错误理解,不增加任何值,并使编译器名称空间变得混乱。而是始终使用:'struct Node_struct'它不是可选的,您可以更改。。。听起来好像是的。谢谢你的建议。
typedef struct Node_struct
{
    int number;
    struct Node_struct *nextNode;
    struct Node_struct *prevNode;
} Node;