我正在使用数组实现来处理优先级队列。一切似乎工作正常,但我收到此错误:'remove' 的类型冲突我已经在其头文件中声明了该函数,我已经包含了头文件,但编译器仍然抱怨。我认为问题出在其他地方。
这是 pqueue.h:
#ifndef PQUEUE_H
#define PQUEUE_H
//---------------
#define HIGHP 0
#define MEDP 1
#define LOWP 2
#define MAXEL 10
#include <stddef.h>
typedef struct message {
char data[100];
int priority;
} message;
typedef struct pQueue {
struct message messages[10];
int rear;
int front;
int size;
} pQueue;
void initPQueue(pQueue *pq);
void add(pQueue *pq, char *data, int pri);
char* remove(struct pQueue *pq); // Error: conflicting types for: 'remove'
int isEmpty(pQueue *pq);
#endif
pqueue.c:
#include "pqueue.h"
#include <string.h>
void initPQueue(pQueue *pq) {
pq->front = 0;
pq->rear = 0;
pq->size = 0;
}
void add(pQueue *pq, char *data, int pri) {
if (pq->size > MAXEL) {
return; // NOTE: data is lost
}
message m;
strcpy(m.data, data);
m.priority = pri;
if (isEmpty(pq)) {
pq->messages[pq->rear] = m;
pq->rear = (pq->rear % (MAXEL - 1)) + 1;
return; // done
}
/**TODO: NEEDS REPAIR**/
int i = 0;
int j = 0;
for (; i < pq->rear; i = (i % (MAXEL - 1)) + 1) {
if (m.priority > pq->messages[i].priority) {
// found element with higher or equal priority
for (j = pq->rear - 1; j >= i; j = (j % (MAXEL - 1)) - 1) {
pq->messages[j] = pq->messages[j - 1];
}
break;
}
}
pq->messages[i] = m;
/****/
pq->size++;
}
char* remove(struct pQueue *pq) {
if (isEmpty(pq)) {
return NULL ;
}
pq->size--;
return pq->messages[pq->front].data;
}
int isEmpty(pQueue *pq) {
if (!pq->size)
return 1;
return 0;
}
有什么想法吗?