所以我正在做一项任务,我们需要将我们自己创建的函数传递给为我们提供的库。
Tree * createBinTree(int (*comparePointer) (TreeDataTypePtr data1,
TreeDataTypePtr data2), void (*destroyPointer) (TreeDataTypePtr));
我是否提供了代码。 我对comparePointer的函数指针是
int(*compStr)(void *, void *) = &compareName;
比较是
int compareName(void * rest1, void * rest2);
但是当我像这样传递它时
Tree * myTree = createBinTree((compstr)(str1,str2),die(str1));
我只在compstr上得到一个错误,即“传递createBinTree的参数1从没有强制转换的整数生成指针”和“expected'int(*)(void *,void *)但参数的类型为int。
答案 0 :(得分:1)
您需要传递函数,而不是调用函数并传递返回值:
Tree* myTree = createBinTree( compstr , die );
但这仍然不正确。 compstr
和die
的类型必须与函数createBinTree
的参数类型兼容:
int(*compStr)( TreeDataTypePtr , TreeDataTypePtr ) = &compareName;
在这种情况下,compareName
必须是相同类型的函数。 die
也是如此。
请注意,只有将兼容类型的函数指针强制转换才会在用于调用函数时导致未定义的行为。函数指针的原始类型必须与用于调用函数的类型兼容。此将导致未定义的行为:
int(*compStr)(void *, void *) = &compareName;
Tree* myTree = createBinTree( ( int(*)(TreeDataTypePtr,TreeDataTypePtr ) )compstr , die );