Указатели на функции в структуре C - PullRequest
0 голосов
/ 05 июля 2018

Я получаю сообщение об ошибке, когда пытаюсь использовать указатель на функцию C внутри структуры (функция просто извлекает первый элемент из связанного списка и возвращает элемент):

main.c: в функции ‘Simulation’: main.c: 279: ошибка: несовместимо типы при присваивании типу "struct PROCESS *" из типа "PROCESS"

Мой код такой:

typedef struct PROCESS {
    struct PS_TABLE *tbl_ref;
    int pid;
    int time_in_prev_state;
    int state_ts;
    int static_prio;
    int dynamic_prio;
    int cpu_rem;            
    struct PROCESS *next;
} PROCESS;

typedef void (*Add) (PROCESS *head, PROCESS *new_ps);
typedef PROCESS (*Get) (PROCESS *head);

typedef struct SCHEDULER {
    int quantum;
    sched_t sch_alg;
    Add add_process;
    Get get_next_process;
} SCHEDULER;

PROCESS *fcfs_get_next_proc(PROCESS **head) {     //POP
    PROCESS *tmp = head;
    head = tmp->next;
    tmp->next = NULL;
    return tmp;
}

SCHEDULER *scheduler_obj = malloc(sizeof(SCHEDULER));
scheduler_obj->get_next_process = fcfs_get_next_proc;

PROCESS *RUNNING_PROCESS = NULL;
RUNNING_PROCESS = scheduler->get_next_process(head_proc);

Любая помощь будет очень признательна!

1 Ответ

0 голосов
/ 05 июля 2018

Ваше поле next struct является struct PROCESS *, а ваша функция возвращает PROCESS. Сделайте их того же типа, и это будет работать.

typedef struct PROCESS *(*Get) (PROCESS *head);
typedef PROCESS *(*Get) (PROCESS *head);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...