указатель функции в структуре с тем же типом аргумента

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

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

что я здесь делаю не так?


person randomThought    schedule 04.02.2011    source источник
comment
Вы хотели вместо этого написать struct sharedData*?   -  person Artyom Shalkhakov    schedule 04.02.2011


Ответы (1)


Проблема в том, что когда вы используете 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.

person templatetypedef    schedule 04.02.2011
comment
Отбросьте последнее подчеркивание; это просто некрасиво и бесполезно. Использование одного и того же имени для тега struct и typedef вполне допустимо. - person R.. GitHub STOP HELPING ICE; 04.02.2011
comment
@R..- Круто! Я этого не знал. Обновлю свой оригинальный пост. - person templatetypedef; 04.02.2011