C ADT函数指针作为参数?

C ADT function pointer as parameter?

我在 ADT 中有一个函数:

Pgroup new_group(int size, void (*foo)(void *));

在我的另一个class中,我有这个功能可以发送:

void foo(Pstruc x);

x 是指向结构的指针。但是,当我尝试调用 new_group 时,我收到错误消息 "expected 'void (*)(void )' but argument is of type 'void ()(struct struc_ *)"。我是这样称呼它的:

Pgroup group = new_group(num, &foo);

有什么建议吗?

您可以将参数转换为正确的类型以消除诊断:

Pgroup group = new_group(num, (void (*)(void *)) foo);

请注意,这不可移植,因为 C 不保证不同指针之间的表示相同。最好的办法是使用在声明中匹配的类型。

您可以将原始函数从 void foo(Pstruc x); 重写为 void foo(void* x);

或转换其类型:(void(*)(void*))foo.