C 错误:‘;节点’;未声明(首次在此函数中使用)

C 错误:‘;节点’;未声明(首次在此函数中使用),c,struct,malloc,C,Struct,Malloc,我在编译时遇到此错误 queue.c: In function ‘enqueue’: queue.c:25:10: error: ‘node’ undeclared (first use in this function) queue.c:25:10: note: each undeclared identifier is reported only once for each function it appears in 为什么会出现这种情况?我不明白如何定义变量节点 以下是我的排队代码:

我在编译时遇到此错误

queue.c: In function ‘enqueue’:
queue.c:25:10: error: ‘node’ undeclared (first use in this function)
queue.c:25:10: note: each undeclared identifier is reported only once for each function it appears in
为什么会出现这种情况?我不明白如何定义变量节点

以下是我的排队代码:

   void enqueue(Queue* queue, int value){
      QNode* node =(QNode *)malloc(sizeof(struct QNode));
      node->data = value;
      if(queue->size == 0){
        q->front = node;
        q->rear = node;
      }else{
        queue->rear->next = node;
        queue->rear = node;
        queue->size++;
      }
}
在文件的开头,我用以下方式定义QNode和Queue:

typedef struct QNode;
struct QNode{
  struct QNode* next;
  int data;
} QNode;

typedef struct Queue{
  int size;
  struct QNode* front;
  struct QNode* rear;
} Queue;

虽然从技术上讲不是错误:

typedef struct QNode;
struct QNode{
  ...
最好写为:

typedef struct QNode {
    ...
你还有:

if(queue->size == 0){
        q->front = node;
        q->rear = node;
q的定义在哪里

也许你的意思是:

if(queue->size == 0){
        queue->front = node;
        queue->rear = node;

我认为
typedef结构QNode
实际上是合法的,尽管它是无用的。它使下面的
struct QNode…
声明声明一个名为
QNode
的对象,而不是将
QNode
声明为typedef。是!一个必然的结果是,void enqueue()函数中的“node”不存在声明(进一步)。编译器随后会抱怨使用了未声明的标识符,即“node”