所以我正在做一项任务,我们需要将自己制作的函数传递到为我们提供的库中。
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使指针从不带强制转换的整数中生成"one_answers"应为"int(*)(void*,void*),但参数的类型为int。
您需要传递函数,而不是调用函数并传递返回值:
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 );