无法计算数组偶数元素和,遇operator<<匹配错误求解决
错误原因与修复方案
错误原因
你写的evenSum函数返回值类型是void,但你在cout语句里直接调用了这个函数——C++里std::ostream(也就是cout的底层类型)根本不知道怎么输出void类型,所以编译器报出了no match for ‘operator<<’的错误。简单说就是:你让cout输出一个“没有返回值”的操作结果,它做不到。
修复方法
只需要两步就能搞定:
- 把
evenSum的返回值类型从void改成int(如果数组元素是其他数值类型,比如long,就对应修改),函数内部计算完偶数和后,用return返回这个结果。 - 调用函数时,直接把
evenSum的返回值传给cout就行,因为现在它返回的是一个具体的数值,cout能正常输出。
错误代码示例(导致报错的写法)
// 错误的evenSum函数 void evenSum(int arr[], int size) { int sum = 0; for (int i = 0; i < size; i++) { if (arr[i] % 2 == 0) { sum += arr[i]; } } // 没有返回语句 } // 错误的调用方式 cout << evenSum(arr, 5); // 这里直接让cout输出void函数的调用结果,必然报错
修复后的代码
// 修复后的evenSum函数 int evenSum(int arr[], int size) { int sum = 0; for (int i = 0; i < size; i++) { if (arr[i] % 2 == 0) { sum += arr[i]; } } return sum; // 返回计算好的偶数和 } // 正确的调用方式 cout << "数组偶数元素的和是:" << evenSum(arr, 5) << endl;
内容的提问来源于stack exchange,提问作者Rama
相关产品推荐
相关产品推荐

