C++中cout调用函数时出现operator<<不匹配错误,求代码修复
解决你的C++「no match for operator <<」错误
嘿,我来帮你搞定这个问题!你遇到的这个编译错误,核心原因其实很简单——你试图把返回值为void的函数直接传给cout输出,而C++里cout根本不知道该怎么处理“没有返回值”这种情况。
错误根源拆解
你的show、rising、lowering三个函数都是void类型(也就是执行完后不会返回任何值),但你在main里写了这样的代码:
cout<<"elementy tablicy to: "<<show(tablica,11)<<endl;
这就相当于让cout去输出一个不存在的“返回值”,编译器找不到对应的<<运算符重载来处理void,自然就会抛出「no match for operator <<」的错误。
另外,rising和lowering是排序函数,本身也不负责输出内容,你原来的写法逻辑上也有问题——排序后没有输出步骤,直接把排序函数塞给cout是没用的。
修复方案
我们需要把提示文字输出和函数调用分开,排序后再调用show来打印结果。具体修改如下:
调整
main函数里的代码逻辑:- 先输出提示文本,再调用
show打印数组 - 先调用排序函数修改数组,再输出提示+调用
show打印排序后的结果
- 先输出提示文本,再调用
修复后的完整代码:
#include <iostream> #include <cstdlib> #include <iomanip> #include <list> using namespace std; void rising(double T[], int n) { double pom; for (int j=n-1;j>0;j--) for (int i=0;i<j;i++) if (T[i]>T[i+1]) { pom=T[i]; T[i]=T[i+1]; T[i+1]=pom; } } void lowering(double T[], int n) { double pom; for (int j=n-1;j>0;j--) for (int i=0;i<j;i++) if (T[i]<T[i+1]) { pom=T[i]; T[i]=T[i+1]; T[i+1]=pom; } } void show(double T[], int n) { for(int i=0; i<n; i++) cout<<T[i]<<setw(3); cout<<endl; } int main() { double tablica[]={2, 12, 3, 4, 5, 4, 7, 8, 9, 9, 0}; // 先输出提示,再调用show打印原数组 cout<<"elementy tablicy to: "; show(tablica,11); // 先升序排序,再输出提示+打印结果 rising(tablica,11); cout<<"elementy tablicy posortowane rosnaco: "; show(tablica,11); // 先降序排序,再输出提示+打印结果 lowering(tablica,11); cout<<"elementy tablicy posortowane malejaco: "; show(tablica,11); cin.get(); cin.ignore(); return 0; }
额外小提示
- 你写的冒泡排序逻辑是对的,但可以给循环加上大括号来明确范围,这样代码可读性更高,也不容易出bug~
- 注意
rising排序后数组已经被修改,之后的lowering是基于升序数组来排序成降序的,这个逻辑没问题;如果想保留原数组,需要先做一份数组拷贝。
内容的提问来源于stack exchange,提问作者Daveman426
相关产品推荐
相关产品推荐

