编辑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;
头文件中的函数原型:
/*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) {
但是我不知道为什么我会犯这个错误,有人能帮我一下吗?非常感谢。
发布于 2010-05-24 05:44:16
您包括头文件吗?除非拼写错误,否则该错误几乎总是由缺少的类型胡枝子引起的。
换句话说,编译器既不知道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
不同的类型(以及当前正在定义的结构)。
发布于 2010-05-24 05:44:35
看起来编译器没有找到pcb
的定义。
发布于 2010-05-24 06:02:21
首先,它是“VOID”而不是“VOID”,除非您有类似的定义
#define VOID void
如果
typedef struct tag_struct_pcb_Q {
pcb *head;
pcb *tail;
SINT32 size;
} pcb_Q;
typedef struct tag_structpcb_pQ {
pcb_Q queues[5];
SINT32 size;
} pcb_pQ;
现代的'C‘编译器期望返回类型必须提到。
如果您有这样的定义,也会导致错误。
#define VOID
另一种可能性
VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ,pcb* pcb) {
pcb从哪里来?使用pcb* pcb是不好的。总是为变量类型和变量名称指定不同的名称。
https://stackoverflow.com/questions/2894967
复制相似问题