qsort 给出 [错误]:从 `int (*)(cricketer*, cricketer*)' 到 `int (*)(const void*, const void*)' 的无效转换

2023-12-13

这是代码,它按平均跑数对板球运动员的数据进行排序。这qsort函数显示错误:

[错误] C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: 错误:无效的转换int (*)(cricketer*, cricketer*) to int (*)(const void*, const void*)

[错误] C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: 错误:初始化 `void qsort(void*, size_t, size_t, 整数()(常量无效,常量无效*))'

include

#include<stdlib.h>
struct cricketer  //structure for details of cricketer
{
    int avg_run;
    char name[20];
    int age;
    int match_no;
} c[4];
int sort(struct cricketer *a, struct cricketer *b);   //pre-defining sort function 
int main()     //main function
{
    int i, s;
    for (i = 0; i < 3; i++)    //enumerating structure records.
    {
        printf("enter the name of cricketer ");
        fflush(stdin);
        gets(c[i].name);
        printf("enter his age,his no of matches and total average runs ");
        scanf("%d%d%d",&c[i].age, &c[i].match_no, &c[i].avg_run);
        }
    printf("records before sorting");  
    for (i = 0; i < 3; i++)
    {
        printf("\n\nname ");
        puts(c[i].name);
        printf("age %d\nno of matches %d\naverage runs %d\n",c[i].age, c[i].match_no, c[i].avg_run);
    }
    qsort(c, 3, sizeof(c[0]), sort); //sorting using qsort
    printf("\nrecords after sorting");
    for (i = 0; i < 3; i++)
    {
        printf("\n\nname ");
        puts(c[i].name);
        printf("age %d\nno of matches %d\naverage runs %d\n",c[i].age, c[i].match_no, c[i].avg_run);
    }
}
int sort(struct cricketer *a, struct cricketer *b)  //sort function definition
{
    if (a->avg_run == b->avg_run)
        return 0;
    else 
        if ( a->avg_run > b->avg_run)
            return 1;
        else 
            return -1;
}

您传递给其指针的函数qsort必须是

int sort(const void* va, const void* vb);

因为那就是qsort期望。然后在该函数中你必须从一开始就做

const struct cricketer *a = (struct cricketer*) va;
const struct cricketer *b = (struct cricketer*) vb;

或者如果您更喜欢使用点进行访问.而不是箭头->

const struct cricketer a = *(struct cricketer*) va;
const struct cricketer b = *(struct cricketer*) vb;

请参阅此处的示例参考

关于错误消息,这个int (*)(cricketer*, cricketer*)是一个指向函数的指针,该函数获取 2 个指向的指针cricketer作为参数。编译器期望这样的函数指针int (*)(const void, const void*)它告诉你它无法将前者转换为后者。另请注意,您如何需要指向 const 数据的指针,因为排序不应修改数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qsort 给出 [错误]:从 `int (*)(cricketer*, cricketer*)' 到 `int (*)(const void*, const void*)' 的无效转换 的相关文章

随机推荐

  • java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE android

    尝试使用下面的代码上传大视频但收到此错误java lang NoSuchFieldError org apache http message BasicHeaderValueFormatter INSTANCE gt 我猜它的发生是由于多个
  • 数据库关系

    在数据库中建立正确的关系除了数据完整性之外还有其他帮助吗 它们会提高还是阻碍绩效 只要您有与外键相对应的明显索引 就不会对性能产生明显的负面影响 这是您必须使用的最简单的数据库功能之一
  • 为什么 onchange 不起作用?

    我只是在网上寻找答案 但还没有找到任何答案 我正在使用 google 的 api 翻译 但我遇到了 JS 问题 事实上 除了一项操作之外 我的代码 100 正常 我的问题是当时没有给出翻译 js 将信息发送给 google 后 不会等到给出
  • Pdfbox:在旋转页面中绘制图像

    我有一个简单的 A4 pdf 文档 其中包含一个属性 Rotate 90 我的 pdf 的原始版本是横向的 但打印的是纵向 我正在尝试在肖像文档的左下角绘制一个小图像 到目前为止 这是我的代码 File file new File rota
  • 理解 JavaScript 中的 Promise

    我编写了很多 JavaScript 代码 虽然我认为我确实了解 Promise 的工作原理 但我不确定我是否完全理解 Promise 给 JS 世界带来的优势 考虑下面的代码 简单的异步调用以及包含进一步调用的回调等等 function d
  • 最优 Java 随机种子

    关于提供long播种java util Random 如果我实例化该对象一次 似乎如果我只是将时间作为种子 这对于程序的生命周期来说是令人满意的 这对于我的目的来说意味着一系列调用的结果nextDouble 看起来随机 假设出于代码简单的原
  • RadioButton.Checked 错误:Control.Checked 不能出现在 += 或 -= 的左侧

    我遇到了最奇怪的问题 我必须遗漏一些东西 这是导致错误的我的代码 if radLot Checked true SymbolSpecification LotRenderer if radWaterMeter Checked true Sy
  • MVC3 模型类的条件验证

    我正在使用实体框架和模型类 DonationForm 由视图模型类 CreateDonationForm 包装 为了遵循 DRY 原则 我在 Model 类 不仅仅是视图模型 上添加了验证注释 以便它们可以重用 但是 并非该类的所有属性都将
  • 让调试器在下一个事件时中断

    在 Visual Basic 6 0 IDE 中 可以中断正在运行的处于空闲状态 等待 UI 线程上的事件 的程序 然后按 F8 单步 此后 任何单击 鼠标悬停或导致代码的其他事件都会导致调试器在要执行的下一行代码处中断 这将是事件处理程序
  • PHP 中的乘法函数结果

    我还是 PHP 的初学者 我有一个小问题 我想乘以该值get formatted order total 3 75 我所做的是 get formatted order total 3 75 但它没有用 这是代码 li class total
  • Web 浏览器调用脚本

    我有一个 Web 浏览器 其中一些设置是使用 javascript 更改的 我正在尝试使用这个例子here但无法获得正确的语法 脚本看起来像这样 div class DisplayInput div
  • 从 .net 4 升级到 4.5 会破坏 Javascript 中的 Html.Raw 调用

    我在 c MVC 3 razor 页面中有以下代码 我将序列化数据传递到 KnockoutJs 的 javascript 变量中 var listData new JavaScriptSerializer Serialize Model L
  • 在 AngularJS 应用程序中加载 JSON(加载谷歌电子表格)

    我正在尝试在我的应用程序中加载 Google 电子表格 但我无法使其正常工作 我尝试了不同的方法来访问树结构 通过控制器和 或通过 html 但它们都不起作用 知道可能出了什么问题吗 这是我的控制器 app controller Super
  • 日期时间修改函数跳过二月

    当添加一个月时DateTime modify方法 结果跳过二月 为什么不输出2020 02 31 如何输出2020 02 29使用日期时间 该月的最后一天 date new DateTime 2020 01 31 echo date gt
  • 尝试设置 Tortoise svn - 新手问题

    我正在尝试在我的 Windows 计算机上设置 svn 来跟踪版本 我已经下载了 tortoise svn 但我很困惑如何安装 我无法为我的问题找到一个好的简单答案 所有手册都相当复杂 所以请不要告诉我 RTFM 我的问题是我在 C svn
  • 如何在正则表达式属性上添加多行选项?

    我在用 RegularExpression a zA Z0 9 1 125 确保多行文本框的每一行正确匹配 然而 我无法弄清楚如何添加全局标志和多行标志选项 MVC 不可能吗 我还有什么其他选择 您可以添加内联选项来启用 MultiLine
  • Google 地图 API 旋转矩形

    我有一个应用程序 它使用 JavaScript API 版本 3 在 Google 地图上绘制矩形数组 这可行 但我想做的是旋转或倾斜每个矩形Rectangle基于用户输入 Is the Rectangle对象仅限于水平 垂直线 API 仅
  • 如何根据 y 值按降序绘制两个列表?

    我有两个清单 第一个是字符串列表a Agriculture Forestry Fisheries Veterinary Medicine Architectural and Town Planning Business Administra
  • 如何为 Electron / Atom Shell 应用程序设置应用程序图标

    如何为 Electron 应用程序设置应用程序图标 我在尝试BrowserWindow icon path to image png 但它不起作用 需要打包app才能看到效果吗 设置icon创建时的属性BrowserWindow仅对 Win
  • qsort 给出 [错误]:从 `int (*)(cricketer*, cricketer*)' 到 `int (*)(const void*, const void*)' 的无效转换

    这是代码 它按平均跑数对板球运动员的数据进行排序 这qsort函数显示错误 错误 C Users Encoder Documents C Free Temp Untitled3 cpp 29 错误 无效的转换int cricketer cr