如何级联->运算符?
How to cascade -> operator?
我有以下内容:
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
最后一行说:"expression must have pointer-to-class type"。我看不出我的代码是怎么错的。由于nodeInSet->nextNode
是一个Node *
,我想我应该允许写nodeInSet->nextNode->prevNode
。什么在这里不起作用?
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;
};
原因是您可以将指针声明为不完整的类型,但是如果您尝试取消引用指针,例如使用 ->
运算符,则必须知道类型,因为大小需要的类型。
您可以将代码更改为这个。
typedef struct Node_struct
{
int number;
struct Node_struct *nextNode;
struct Node_struct *prevNode;
} Node;
我有以下内容:
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
最后一行说:"expression must have pointer-to-class type"。我看不出我的代码是怎么错的。由于nodeInSet->nextNode
是一个Node *
,我想我应该允许写nodeInSet->nextNode->prevNode
。什么在这里不起作用?
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;
};
原因是您可以将指针声明为不完整的类型,但是如果您尝试取消引用指针,例如使用 ->
运算符,则必须知道类型,因为大小需要的类型。
您可以将代码更改为这个。
typedef struct Node_struct
{
int number;
struct Node_struct *nextNode;
struct Node_struct *prevNode;
} Node;