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

C++如何将一个函数的输出传入另一函数及报错问题解析

报错根本原因

你遇到的类型不匹配报错,核心是两个写法错误导致的:

  1. 传参逻辑错误:你调用sum时写的是sum(1,5,function(x)),这不是把function函数传给sum,而是当场调用function(x)、把调用后的int类型返回值传给sum。但sum的第三个参数要求的是接收一个函数(实际会退化为函数指针,类型为int (*)(int),即指向“入参为int、返回值为int”的函数的指针),int类型的值和函数指针类型完全不兼容,就会触发你看到的报错。
  2. 目标函数语法错误:你示例里写的int function(x){ return 2*x;}不符合C++语法规范,函数的形参必须明确标注类型,漏写x的int类型会直接导致编译失败。

另外你原代码里sum的第三个参数写法int function(int input)本身语法是合法的——C++中函数作为形参时会自动退化为函数指针,只是你传参的时候传错了值,才触发了类型错误。

最简可运行实现

直接用匹配的函数指针做形参即可,完整可运行代码如下:

// 求和函数:第三个参数明确声明为对应类型的函数指针
int sum(int start, int end, int (*func)(int)) {
    int total = 0;
    for (int i = start; i < end; i++) {
        total += func(i); // 遍历区间值,传入目标函数拿返回值累加
    }
    return total;
}

// 自定义目标函数,必须明确标注形参类型
int double_num(int x) {
    return 2 * x;
}

// 调用示例
int main() {
    // 注意:传目标函数时只写函数名,不要加括号、不要传调用实参
    int result = sum(1, 5, double_num);
    // 计算逻辑:2*1 + 2*2 + 2*3 + 2*4 = 2+4+6+8 = 20,你之前算的10属于累加计算错误
    return 0;
}
实现原理说明
  • C++中,单独写函数名(不带括号、不传入调用参数)时,会自动解析为该函数在内存中的起始地址,也就是对应类型的函数指针,正好匹配sum第三个参数的类型要求,不会出现类型冲突。
  • sum函数内部拿到函数指针后,在for循环遍历[start, end)区间的每个整数i时,通过该指针调用传入的目标函数,把i作为参数传入拿到单次调用的返回值,逐次累加到总和变量中,循环结束后返回最终累加结果即可。
  • 只要是符合「入参为1个int类型、返回值为int类型」规则的自定义函数,都可以直接把函数名传给sum使用,不需要修改sum的内部逻辑。

内容的提问来源于stack exchange,提问作者alienare 4422

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:51:28