Вы можете переадресовать-объявить структуру:
/* Tell the compiler that there will be a struct called _sStruct */
struct _sStruct;
/* Use the full name "struct _sStruct" instead of the typedef'ed name
"sStruct", since the typedef hasn't occurred yet */
typedef void (callback)(int *p1, struct _sStruct *p2);
/* Now actually define and typedef the structure */
typedef struct _sStruct
{
callback *funct;
} sStruct;
Edit: Изменено в соответствии изменить вопрос по именам типов.
Кроме того, я настоятельно рекомендую вам не указывать struct идентификатор _sStruct
. Глобальные имена, начинающиеся с _
, являются зарезервированными именами, а их использование для собственных идентификаторов может привести к неопределенному поведению.
Что такое «повторяющееся объявление»? Вы имеете в виду круговое объявление или самореференцию? – progrmr