我试图在C中实现通用堆栈。我只是写了这段原始代码,却收到大量错误和警告。但是,我不明白的一件事是以下错误(和其他类似错误):

In file included from gstack.c:3:
./gstack.h:7:1: error: unknown type name 'gqueue'
gqueue create_queue();
^
./gstack.h:8:13: error: unknown type name 'gqueue'
int enqueue(gqueue *Q, gqdata *D);
            ^
./gstack.h:8:24: error: unknown type name 'gqdata'
int enqueue(gqueue *Q, gqdata *D);


gstack.h:

#ifndef _GSTACK_H_
#define _GSTACK_H_

void *gqueue;
void *gqdata;

gqueue create_queue();
int enqueue(gqueue *Q, gqdata *D);
int dequeue(gqueue *Q);
void to_string(gqueue *q);

#endif


gstack.c:

#include <stdio.h>
#include <stdlib.h>

#include "gstack.h"

void *gqueue;
void *gqdata;

typedef struct queue {
  Node *tos;
} Queue;

typedef struct node {
  Node *next;
  gqdata data;
} Node;

gqueue create_queue(){
  Queue queue = (Queue *)malloc(sizeof(Queue));
  if (queue != NULL) {
    queue->tos = NULL;
  }
  return queue;
}
int enqueue(gqueue *Q, gqdata *D) {
  Queue queue = (Queue *) Q;
  Node node = (Node *)malloc(sizeof(Node));

  if (node != NULL) {
    node->next = queue->tos;
    node->data = D;
    Q->tos = node;
    return 1;
    return 1;
  } else {
    return 0;
  }
}
int dequeue(gqueue *Q) {
  Queue *queue = (Queue *) Q;
  if (queue == NULL || queue->tos == NULL) return 0;
  queue->tos = queue->tos->next;
  return 1;
}

void to_string(gqueue *Q) {
  Queue *queue = (Queue *) Q;
  if (queue == NULL || queue->tos == NULL) return 0;
  queue->tos = queue->tos->next;
  return 1;
}

void to_string(gqueue *Q) {
  Queue *queue = (Queue *) Q;
  Node *cursor = Queue->tos;
  while(cursor != NULL) {
    printf("%d\n");
    cursor = cursor->next;
  }
}


我究竟做错了什么?

最佳答案

void *gqueue; void *gqdata;gqueuegqdata都声明为指向void的指针的变量;因此,您不能将它们用作类型的名称。您究竟希望gqueuegqdata是什么?

关于c - gstack.c:14:3:错误:未知类型名称'gqdata',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23726647/

10-11 18:00