указатель на функцию в структуре с тем же типом аргумента - PullRequest
3 голосов
/ 04 февраля 2011

Я пытаюсь создать структуру, в которой есть указатель на функцию, которая принимает ту же структуру, что и аргумент.У меня есть это на данный момент.

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(sharedData*);
};

Я получаю ошибки вроде

ошибка: ожидается ')' до '*' токен

и предупреждения типа

 warning: no semicolon at end of struct or union 
 warning: useless storage class specifier in empty declaration

что я тут не так делаю?

1 Ответ

6 голосов
/ 04 февраля 2011

Проблема в том, что когда вы используете typedef struct для введения нового struct, для которого не требуется ключевое слово struct, вы не можете ссылаться на имя typedef внутри объявления struct. Вместо этого вам нужно использовать полное имя для структуры. Например:

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(struct sharedData*);
};

Кроме того, ваш оператор typedef в настоящее время недействителен, потому что вы не указали имя для вызова struct sharedData. Один из способов исправить это будет следующим:

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(struct sharedData*);
} sharedData;

Теперь вы можете ссылаться на структуру по полному имени struct sharedData или по сокращенному имени sharedData.

...