我试图在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;
将gqueue
和gqdata
都声明为指向void
的指针的变量;因此,您不能将它们用作类型的名称。您究竟希望gqueue
和gqdata
是什么?
关于c - gstack.c:14:3:错误:未知类型名称'gqdata',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23726647/