【问题标题】:Qsort dilemma in C++C++中的Qsort困境
【发布时间】:2013-05-07 18:09:57
【问题描述】:
Vector<Medicine*>* Controller::sortByStockAsc(){
        Vector<Medicine*>* all =repo->getAll();
        qsort(all, all->getNrMed(),sizeof(Medicine*), (comparefunction) compareNA);
        return all;}

我有上面的代码,我的 qsort 有一些问题。 Vector&lt;Medicine*&gt;* 是指向我需要整理的指针数组的指针。 getAll() 返回 Vector &lt;Medicine*&gt;*。 问题之一是在qsort() 中找不到我的getNrMed(),尽管我指定了定义此函数的模块。函数如下:

int MedRepository::getNrMed(){
    return MedList->getSize();
}

并返回int。我做错了什么?

【问题讨论】:

  • 什么是Vector?您使用qsort 似乎非常错误。
  • 您可能想描述“我的 qsort 有一些问题”是什么意思,是否因为无法支付抵押贷款而感到沮丧?使用std::sort(),因为qsort() 使用memcpy() 交换对象,这并不总是适用于C++ 对象。
  • 试试all-&gt;begin()(*all).begin()。也就是说,猜测代码、未指定的错误消息(“rezolved”?),仍然不是所有的代码——你不是在帮助别人来帮助你。另一个警告:C 的 qsort() 和 C++ 的 std::sort() 所需的函数不同且兼容!
  • 他的意思不是std::vector
  • 我知道你的意思,但要明确std::vector也是一个基于模板的类。它恰好随您的编译器一起提供,但没有以任何特定方式进行特殊处理。

标签: c++ qsort


【解决方案1】:

qsort 不接受Vector&lt;T&gt;*。它需要一个指向向量第一个元素的指针。

getNrMed 不是Vector&lt;T&gt; 的方法,它是MedRepository 的方法,在这个sn-p 的其他地方看不到。

您需要在compareNA 上添加演员表这一事实表明存在严重问题。强制转换函数指针几乎是安全的。你需要让它在没有强制转换的情况下编译。

毫无疑问,考虑到这里的代码质量,还有其他问题——鉴于您提供的代码数量有限,这正是可以诊断出来的问题。

【讨论】:

  • 我怎样才能让它在没有演员表的情况下编译?你认为我应该在上面的片段旁边显示哪些代码部分?
  • 若要使其在不强制转换的情况下编译,只需将函数原型更改为qsort() 所期望的原型即可。该比较函数中的第一件事是将 void 指针转换回类型化指针。帮自己一个忙,尝试使用它来对一个简单的整数数组进行排序,即创建一个单独的测试项目来熟悉它。
  • 伙计,你已经超出了你的深度。你看起来是有报酬的工作,你能去找另一位工程师亲自寻求帮助吗?当您不知道自己在做什么时,尝试通过 SO 进行调试将是一场噩梦。
  • 嗯,我不是员工,我是一名学生,目前正在学习 c++ 几个星期,这段代码是我被分配做的项目的一部分。
  • 你有什么帮助吗,比如教授或助教之类的?还是你只是瞎了眼?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多