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

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来打印结果。具体修改如下:

  1. 调整main函数里的代码逻辑:

    • 先输出提示文本,再调用show打印数组
    • 先调用排序函数修改数组,再输出提示+调用show打印排序后的结果
  2. 修复后的完整代码:

#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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:07:32