编辑 2
感谢所有建议,我根据给出的建议编辑了下面的代码。但是,它似乎仍然无法编译。尽管如此,还是非常感谢您的帮助。
编辑
我很抱歉没有将 pcb 结构放入代码片段中。在我最初发布的两个结构中定义了一个名为 pcb 的结构。即,
typedef struct pcb{
UINT32 proc;
struct pcb *link;
}pcb;
你好,
几分钟前我问了一个关于 C 中结构的问题,并很快得到了答案。但现在我面临另一个问题,即这个问题标题中的错误。我正在尝试使用队列数组在 C 中实现一个简单的优先级队列。但是,当我尝试在 pcb_pQ 结构上声明一个函数时,出现上述错误。我在听过的文件中清楚地定义了结构。
在头文件中:
typedef struct pcb_Q{
pcb *head;
pcb *tail;
SINT32 size;
} pcb_Q;
typedef struct pcb_pQ {
pcb_Q queues[5];
SINT32 size;
} pcb_pQ;
头文件中的函数原型(prototype):
/*priority queue operations*/
VOID pcb_pq_enqueue(pcb_pQ*, pcb*);
.c 文件中的函数实现:
VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ_p, pcb* pcb_p) {
pcb_Q* pcb_Q_p;
int priority;
priority = pcb->proc_priority;
pcb_Q_p = &pcb_pQ->queues[priority];
pcb_enqueue(pcb_Q_p, pcb);
}
当我尝试编译上面的代码时,我在 '*' 标记之前收到一个“错误:预期的 ')'”。这个错误指向.c文件中的函数签名,即
VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ_p, pcb* pcb_p) {
但我不确定为什么我会收到这个错误,有人可以帮我吗?非常感谢。
最佳答案
你包括头文件吗?除非拼写错误,否则该错误几乎总是由缺少 typedef 引起的。
换句话说,编译器不知道 pcb_pQ
或 pcb
类型(或两者)。
编辑:还有其他错误,因为它可以正常编译:
qq.h
typedef struct pcb {
unsigned int proc;
struct pcb *link;
} pcb;
typedef struct{
pcb *head;
pcb *tail;
int size;
} pcb_Q;
typedef struct pcb_pQ {
pcb_Q queues[5];
int size;
} pcb_pQ;
void pcb_pq_enqueue(pcb_pQ*, pcb*);
qq.c:
#include <stdio.h>
#include "qq.h"
void pcb_pq_enqueue(pcb_pQ *pcb_pQ, pcb *pcb) {}
int main (void) { return 0; }
我不得不使用其他类型(并且我将
pcb
结构修改为一个命名结构 - 我不确定你给定的结构是否应该从原样编译,因为不存在 struct pcb
类型)。根据迄今为止的所有评论和答案,我很确定您的编译器有问题。 GCC 编译上面的那个片段就好了。
试着把我上面的两个文件放到你的系统上,看看它们是否编译正常。
请注意,您确实需要命名
pcb
结构。有关血腥细节,请参阅 here,但共识似乎是 typedef struct {
unsigned int proc;
struct pcb *link;
} pcb;
将定义一个
struct pcb
不完整类型,它是与 pcb
(以及您当前定义的结构)不同的类型。关于C 问题 : error: expected ')' before '*' token,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2894967/