这实际上是一个非关键问题,但我在大多数情况下使用函数指针时都会收到此警告,但我自己仍然无法弄清楚为什么。考虑以下原型:
typedef void * Pointer;
void tree_destroyLineage(Tree greatest_parent, void *dataDestructor(Pointer data));
到目前为止,我可以编译我的千行代码并获得零警告。所以我假设我正确地编写了声明。但后来我在代码中调用它,将 free 作为我的析构函数传递,因为存储在树节点中的数据是简单的结构:
tree_destroyLineage(decision_tree, free);
这让我得到了一个"warning: passing argument 2 of 'tree_destroyLineage' from incompatible pointer type"
信息。我的第一个假设是编译器在编译时无法弄清楚这是同一件事Pointer
,void *
所以我尝试使用完全相同类型的函数指针创建另一个函数,以“重新传递”调用free()
并更改函数指针声明接受 avoid *
而不是指针。这两种方法在同一个地方给了我同样的警告。
我做错了什么,我该如何解决?