我在findMax函数中遇到问题,使用数组中的递归find max元素(代码C ++):
void findMax (int& imax, int n, int* arr){
imax=arr[0]?arr[0]:0;
if(n > 0){
imax = std::max(arr[n],findMax(imax, n-1, arr)); // error here: No matching function for call to max???
}
}
你能解释一下这个错误的原因和解决方案吗?
谢谢,
答案 0 :(得分:3)
std::max
将返回两个值中较大的一个,但findMax
的返回类型为void
。
void findMax (int& imax, int n, int* arr)
所以它正在寻找
std::max(int, void)
显然不存在。
答案 1 :(得分:2)
除了更改函数以返回int之外,您可以在范围有效时执行findmax,然后仅使用返回值调用std :: max。
void findMax (int& imax, int n, int* arr){
imax=arr[0]?arr[0]:0;
if(n > 0){
findMax(imax, n-1, arr);
}
imax = std::max(arr[n], imax);
}
@CoryKramer是正确的,但错误确实没有在你的例子中将int传递给max。如果您只是想解决这个问题,可以使用这个备用解决方案:
int findMax (int& imax, int n, int* arr){
imax=arr[0]?arr[0]:0;
if(n > 0){
imax = std::max(arr[n],findMax(imax, n-1, arr));
}
return imax;
}