「 C++ 调试错误 」int (Solution::*) (const void* a, const void* b) 类型的实参与 int (_cdecl::*) (const void* , c

一、编译问题描述

        C++ qsort() 函数调用时,发生实参与形参不兼容的问题。

 int (Solution::*) (const void* a, const void* b) 类型的实参与 int (_cdecl::*) (const void* , const void* ) 类型的形参不兼容

二、错误原因

        C++函数与C语言函数混用,在某些情况下是不能替换使用的。

三、解决方法

        在主函数之前声明比较函数。注意:C++ 排序尽量使用 sort(),不要使用 C 语言中的 qsort(),代码如下:

//********错误*********//
class Solution {
public: 
  bool IsContinuous(vector<int>  numbers) {
        if (numbers.size() != 5)
            return  false;
        //qsort(&numbers, numbers.size(), sizeof(int),  compare);
        qsort(&numbers[0], numbers.size(), sizeof(int),  compare);
        //sort(numbers.begin(), numbers.end());

        int numZeros = 0;
        int diff = 0;
        for (int i =  0; i < numbers.size() - 1; ++i) {
            if (numbers[i] ==  0)
                ++ numZeros;
            else {
                if  (numbers[i] == numbers[i + 1])
                    return  false;
                diff += numbers[i + 1] - numbers[i] -  1;
            }
        }
        return (numZeros < diff) ? false  : true;
    }
  
  int compare(const void *a, const void *b) {
     return (*(int*)a - *(int*)b);
  }
};


//********正确*********//
int compare(const void *a, const void *b) {
  return (*(int*)a -  *(int*)b);
}



class Solution {
public: 
  bool IsContinuous(vector<int>  numbers) {
        if (numbers.size() != 5)
            return  false;
        //qsort(&numbers, numbers.size(), sizeof(int),  compare);
        qsort(&numbers[0], numbers.size(), sizeof(int),  compare);
        //sort(numbers.begin(), numbers.end());

        int numZeros = 0;
        int diff = 0;
        for (int i =  0; i < numbers.size() - 1; ++i) {
            if (numbers[i] ==  0)
                ++ numZeros;
            else {
                if  (numbers[i] == numbers[i + 1])
                    return  false;
                diff += numbers[i + 1] - numbers[i] -  1;
            }
        }
        return (numZeros < diff) ? false  : true;
    }
  
};

*问题成功解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值