我正在用c创建一个队列数据结构。
typedef struct Queue_node{
int value;
struct Queue_Node* next;
};
struct Queue_Node* front = NULL;
struct Queue_Node* R = NULL;
void Enqueue(int x)
{
struct Queue_node* temp = (struct Queue_node*)malloc(sizeof(struct Queue_node*));
temp->value = x;
temp->next = NULL;
if (front == NULL && R == NULL)
{
R = temp;
front = R;
return;
}
R->next = temp;
R = temp;
}
在第 24 行(R->next = temp
(,编译器告诉我:
取消引用指向不完整类型"结构Queue_node"的指针。
我无法访问R->next after
声明,为什么?
你的代码中问题很少,首先在做typedef
时给出别名。
typedef struct Queue_node{
int value;
struct Queue_Node* next;
}Queue_node;/*put alias name here */
其次,malloc()
内存分配不正确
struct Queue_node* temp = (struct Queue_node*)malloc(sizeof(struct Queue_node*));
它应该是(分配内存等于Queue_node
的大小,而不是Queue_node*
(
struct Queue_node* temp = malloc(sizeof(struct Queue_node));
还要避免malloc()
结果进行铸造。看到这篇文章 我投射了 malloc 的结果吗?
struct Queue_node{
int value;
struct Queue_Node* next;
};
或
typedef struct Queue_Node{
int value;
struct Queue_Node* next;
}Queue_Node;
会做到的。
虽然现有的答案已经告诉你,你的typedef
缺少一个名字,但你有一个更简单的问题:
typedef struct Queue_node{
int value;
struct Queue_Node* next;
};
基本上错误的是一个简单的错别字!
定义一个struct Queue_node
。在其中,您希望使用指向不存在struct Queue_Node
的指针。
在 C 结构标记中,类型名称或任何其他标识符区分大小写。
像这样更改类型定义
struct Queue_Node{
int value;
struct Queue_Node* next;
};
或
typedef struct Queue_Node{
int value;
struct Queue_Node* next;
} Queue_Node;
您也可以使用 Queue_node但在整个代码中使用相同的编写方式很重要。