C вопрос: ошибка: ожидается ')' до '*' токена - PullRequest
3 голосов
/ 24 мая 2010

Редактировать 2

Спасибо за все предложения, я отредактировал приведенный ниже код из предоставленных предложений.Тем не менее, он все еще не компилируется.Но, тем не менее, большое спасибо за помощь.

Edit

Я прошу прощения за то, что не поместил структуру 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 file:

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: Ожидается») перед «*» токеном.Эта ошибка указывает на сигнатуру функции в файле .c, а именно:

VOID pcb_pq_enqueue(pcb_pQ* pcb_pQ_p, pcb* pcb_p) {

Но я не уверен, почему я получаю эту ошибку, кто-то может мне помочь?Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 24 мая 2010

Вы включаете заголовочный файл? За исключением орфографических ошибок, эта ошибка почти всегда вызвана отсутствием 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 компилирует этот фрагмент выше просто отлично.

Попробуйте поместить мои два файла выше в вашу систему и посмотреть, хорошо ли они компилируются.

И помните, что вам do необходимо назвать вашу pcb структуру. Смотрите здесь для подробностей, но консенсус, кажется, таков:

    typedef struct {
        unsigned int proc;
        struct pcb *link;
    } pcb;

определит struct pcb неполный тип, который отличается от pcb (и структуры, которую вы в настоящее время определяете).

0 голосов
/ 24 мая 2010

Изменение:

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

до:

typedef struct pcb {
    UINT32 proc;
    struct pcb *link;
} pcb;
0 голосов
/ 24 мая 2010

Во-первых, это ' void ' not ' 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 . ВСЕГДА дайте другое имя для типа переменной и имени переменной

0 голосов
/ 24 мая 2010

Похоже, компилятор не находит определения pcb.

...