C++新手求助:函数传递时出现double(*)(string,double,double)转double错误
解决你的C++类型转换错误问题
兄弟,这个错误的核心其实特别好理解——你把函数本身(也就是函数指针)当成了函数的返回值(double类型),传给了某个需要double参数的函数(比如你提到的winning_teams或者Wins_losses)。
咱们拆解一下:当你直接写win_percentage的时候,它代表的是这个函数在内存中的地址(也就是函数指针),而不是调用它计算出来的胜率数值。但你的目标函数(比如winning_teams)的第4个参数要求是double类型的数值,所以编译器就报错说没法把函数指针转换成double。
错误写法 vs 正确写法
举个具体的例子,你可能现在是这么写的:
// 错误:直接传递函数指针,而非函数执行后的结果 winning_teams(team_name, wins, losses, win_percentage);
而正确的做法是,给win_percentage加上括号和对应的参数,让它执行并返回计算好的double胜率:
// 正确:调用函数,传入计算后的double类型胜率值 winning_teams(team_name, wins, losses, win_percentage(team_name, wins, losses));
额外的小提示
- 先确认
win_percentage的函数实现是正确的:它确实接收std::string, double, double这三个参数,并且返回double类型的结果 - 检查你调用的目标函数(比如
winning_teams)的参数定义,确保第4个参数确实是double类型,和你传入的结果匹配 - 如果用结构体存储队伍数据,还可以更简洁地传递参数,比如:
// 假设你定义了队伍结构体 struct Team { std::string name; double wins; double losses; }; // 调用时直接从结构体取值 Team basketball_team = {"校篮球队", 15, 7}; winning_teams(basketball_team.name, basketball_team.wins, basketball_team.losses, win_percentage(basketball_team.name, basketball_team.wins, basketball_team.losses));
内容的提问来源于stack exchange,提问作者DWILLS
相关产品推荐
相关产品推荐

