我正在尝试用 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: error: unknown type name 'gqdata' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726647/