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*)' 的无效转换 的相关文章

  • Unity3D StartCoroutine 调用一个函数,该函数什么时候返回?

    我知道Unity3D StartCoroutine调用了一个与StartCoroutine在同一线程上运行的函数 但是被调用的函数什么时候返回到原始调用者 我在互联网上查找了一个很好的 Unity3D Coroutine 示例 但找不到完整
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 将一个 long 转换为两个 int 以进行重构

    我需要将一个参数作为两个 int 参数传递给 Telerik Report 因为它不能接受长参数 将 long 拆分为两个 int 并在不丢失数据的情况下重建它的最简单方法是什么 使用掩蔽和移位是最好的选择 根据文档 long 保证为 64
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标

随机推荐

  • 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