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

自定义qsort函数引发匹配警告及错误的原因与解决方法咨询

关于qsort函数调用错误与警告的问题解析

错误与警告的原因

咱们先拆解一下你遇到的问题:

  1. 命名冲突引发警告:你自定义的函数名qsort和C标准库<stdlib.h>里的标准排序函数qsort完全重名了。编译器处理代码时,同时找到了两个候选函数——一个是标准库的void qsort(void*, size_t, size_t, int (*)(const void*,const void*)),另一个是你写的int qsort(vector<int>&arr),所以抛出警告提示你存在多个可选函数。
  2. 调用参数不匹配导致报错:从错误信息no matching function for call to qsort(int[((unsigned int)((int)n))])能看出来,你在代码其他地方调用qsort时,传入的是原始int数组,但你自定义的qsort要求的参数是vector<int>&(vector的引用),参数类型完全不匹配,编译器找不到合适的函数调用,因此直接报错。

解决方法

针对这两个问题,咱们一步步处理:

  • 第一步:修改自定义函数名,避免命名冲突
    把你写的快速排序函数改名,比如改成myQuickSort或者quickSort,彻底避开和标准库函数的重名问题,这能直接消除警告。
  • 第二步:确保函数调用的参数类型正确
    如果你的数据是原始int数组,要么把数组转换成vector<int>再传给自定义排序函数,要么修改自定义函数的参数,让它支持直接接收int数组(同时记得改函数名)。

修改后的代码示例

这里给你整理好的代码,不仅改了函数名,还修正了原函数的返回值问题(原函数声明返回int但没有return语句,属于未定义行为,改成void更合理,因为排序直接修改传入的vector即可):

#include <vector>
#include <iostream>
using namespace std;

int par(vector<int>&arr, int low, int high) { 
    int pivot = arr[low]; 
    while(low < high) { 
        while(low < high && arr[high] >= pivot)high--; 
        arr[low] = arr[high]; 
        while(low < high && arr[low] <= pivot)low++; 
        arr[high] = arr[low]; 
    } 
    arr[low] = pivot; 
    return low; 
} 

// 改名成myQuickSort,返回值改为void
void myQuickSort(vector<int>&arr) { 
    int mystack[2000]; 
    int top = -1; 
    mystack[++top] = 0; 
    mystack[++top] = arr.size() - 1; 
    while(top > 0) { 
        int high = mystack[top--], low = mystack[top--]; 
        int middle = par(arr, low, high); 
        if(middle+1 < high) { 
            mystack[++top] = middle+1; 
            mystack[++top] = high; 
        } 
        if(low < middle-1) { 
            mystack[++top] = low; 
            mystack[++top] = middle-1; 
        } 
    } 
}

// 调用示例(适配原始int数组的情况)
int main() {
    int arr[] = {3,1,4,1,5,9};
    vector<int> vec(arr, arr + sizeof(arr)/sizeof(arr[0]));
    myQuickSort(vec);
    // 输出排序后的结果
    for(int num : vec) {
        cout << num << " ";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者CuteSheep233

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:42:02