一、编译问题描述
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;}};