C ADT函数指针作为参数?

时间:2015-12-10 22:57:47

标签: c function-pointers abstract-data-type

我在ADT中有一个功能:

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

在我的其他课程中,我有这个函数发送:

void foo(Pstruc x);

x是指向结构的指针。当我尝试调用new_group时,我收到错误“expected'void(*)(void )'但参数类型为'void()(struct struc_ *)”。这就是我一直在说的:

Pgroup group = new_group(num, &foo);

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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