You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用函数指针与模板排序对象数组?代码报错‘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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:06:30