当前位置: 代码迷 >> 综合 >> 「 C++ 调试错误 」int (Solution::*) (const void* a, const void* b) 类型的实参与 int (_cdecl::*) (const void* , c
  详细解决方案

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

热度:4   发布时间:2023-12-15 10:09:03.0

一、编译问题描述

        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;}};

*问题成功解决。

  相关解决方案