如何用函数指针与模板排序对象数组?代码报错‘f未声明’求解
问题原因分析
你遇到的「'f'未声明」错误,核心问题出在函数指针的调用逻辑上:
- 你在声明函数指针参数时写的
bool (*cmp)(T d,T f),这里的d和f只是函数指针指向的函数的形参名,它们只在那个被指向的函数内部有效,在当前sort函数的作用域里根本不存在这两个变量。 - 当你写
(*cmp)(d,f)时,编译器找不到d和f的定义,自然报错。
修正后的代码示例
你需要把调用cmp时的参数换成实际要比较的对象,也就是n_obj数组里的元素(假设Result类型兼容模板参数T):
template<typename T> void sort(Result* n_obj, int n, bool (*cmp)(T, T)){ // 此处可省略形参名,不影响功能 for(int i = 0; i<n-1; i++){ for(int j = i+1; j<n; j++){ if((*cmp)(n_obj[i], n_obj[j])){ // 传入实际要比较的数组元素 swap(n_obj[i],n_obj[j]); } } } }
补充说明
声明函数指针参数时,形参名d和f是可选的,写成bool (*cmp)(T, T)就足够清晰,不会影响功能。
内容的提问来源于stack exchange,提问作者Rot
相关产品推荐
相关产品推荐

