c - gstack.c :14:3: error: unknown type name 'gqdata'

标签 c

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

相关文章:

c++ - 初始化 char 数组 - C 和 C++

c - 用C语言从xml中解析一个字符?

c - 如何在代码中两次使用gethostbyname

c - select 只检查 fds 直到 255 直到 FD_SETSIZE

C内存泄漏与valgrind

将各个程序集转换为机器代码

mysql - 为 Mariadb 安装连接器 C

c - 我在 "expected declaration specifiers or ‘...’ token 之前收到错误 ‘(’”?

c - 数组的长度是多少?

c - 为什么我的 srand(time(NULL)) 函数每次在 c 中生成相同的数字?