【发布时间】:2020-11-13 02:14:19
【问题描述】:
我是 C 新手,我正在尝试编写队列问题。目前,我正在编写一些代码来检查队列是否为空。这是我目前所拥有的:
对于 Queue.h(这是我们的讲师提供的)
#include <stdio.h>
#include <stdlib.h>
struct queueNode {
char data;
struct queueNode *nextPtr;
};
typedef struct queueNode QueueNode;
typedef QueueNode* QueueNodePtr;
typedef struct Queue {
QueueNodePtr head;
QueueNodePtr tail;
} Queue;
void instructions();
int isEmpty(Queue);
void enqueue(Queue*, char);
char dequeue(Queue*);
void printQueue(Queue);
void freeQueue(Queue*);
对于 Queue.c
#include <stdio.h>
#include <stdlib.h>
#include "Queue.h"
int isEmpty(struct Queue queue)
{
if (Queue == NULL)
{
return 1;
}
}
问题在 Queue.c 的第 8 行,编译器说“错误:'Queue' 之前的预期表达式”我将如何解决这个问题?
编辑:我尝试使用 queue == NULL 而不是 Queue == NULL 并且编译器说:错误:二进制操作数无效 ==(有 'struct队列'和'void*')。
非常感谢!
【问题讨论】:
-
Queue是结构的名称。表达式Queue == NULL试图将类型名称与值进行比较。参数struct Queue queue通过value 传递您的队列,这可能不是您想要的。考虑到所有因素,绝对不清楚如何回答这个问题,因为它可能取决于您的结构本身的语义。我建议您编辑您的问题以显示Queue.h的内容。 -
阅读Modern C,查看C reference website,阅读编译器文档(例如GCC...)和调试器 (例如GDB)。使用 GCC 编译为
gcc -Wall -Wextra -g(所有警告和调试信息)。从github 上用 C 编码的现有程序中汲取灵感 -
感谢您的参考!它们确实很有用!