编辑 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_pQpcb 类型(或两者)。

编辑:还有其他错误,因为它可以正常编译:

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/

10-13 07:00