Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C问题:错误:预期为';)';在'之前*';代币_C_Function_Struct - Fatal编程技术网

C问题:错误:预期为';)';在'之前*';代币

C问题:错误:预期为';)';在'之前*';代币,c,function,struct,C,Function,Struct,编辑2 感谢所有的建议,我根据给出的建议编辑了下面的代码。然而,它似乎仍然没有编译。但无论如何,非常感谢你的帮助 编辑 我很抱歉没有将pcb结构放入代码段中。在我最初发布的两个结构上面定义了一个名为pcb的结构。即 typedef struct pcb{ UINT32 proc; struct pcb *link; }pcb; 嗨 几分钟前,我问了一个关于C中结构的问题,很快得到了答案。但现在我面临另一个问题,即这个问题的标题错误。我正在尝试使用队列数组在C中实现一个简单的优先

编辑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*);
头文件中的函数原型:

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);
}
当我试图编译上述代码时,我在“*”标记之前得到一个“error:expected')。此错误指向.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; }

将定义一个
struct pcb
不完整类型,该类型与
pcb
(以及您当前定义的结构)不同。

编译器似乎没有找到
pcb

的定义。首先,它是“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
另一种可能性

无效pcb_pq_排队(pcb_pq*pcb_pq,pcb*pcb){

pcb来自哪里?拥有pcb*pcb是不好的。始终为变量类型和变量名称指定不同的名称

更改:

typedef struct{
    UINT32 proc;
    struct pcb *link;
}pcb;
致:


PCB定义为哪种类型?我认为对于类型和变量使用相同的名称是一个非常糟糕的想法。如果你区分它们,这将是一个很容易阅读的地方。它似乎来自编译器无法找到PCB*PQ的注释,因为我还有其他使用PCB和PCBYQ的函数,它们没有显示任何问题。每个头定义的结构?我知道这听起来很愚蠢,但我不知道是什么错了,如果我在函数参数中取出pcb_pQ,代码就会显示出来fine@lhw你在用什么编译器?你注意到他粘贴的代码中的大写字母了吗,特别是VOID和UINT32?谢谢你试用,现在我想这可能是编译器的问题..我注意到了使用交叉编译器,而不是通常的gcc。@Tim,我注意到了这一点,但是,如果没有正确声明,他可能会在头文件中出错,而不是在C文件中。@paxdiablo,对不起,我没有捕获到原型。在gcc和clang下,我也编译得很好,令人惊讶的是,pcb未命名并没有给出任何警告。@lhw这会给你一个提示吗使用交叉编译器时有哪些错误?是的,它实际上是在另一个定义文件中定义的,谢谢你的回答。虽然我一开始看到了相同的东西,但是,他在编译c文件时出现了错误。如果
VOID
被破坏,他会在看到函数原型时立即在头中出现错误。为什么不呢但是,在标题中抛出一个错误?我想他可能有一个坏掉的编译器。