2013-05-07 34 views
0
Vector<Medicine*>* Controller::sortByStockAsc(){ 
     Vector<Medicine*>* all =repo->getAll(); 
     qsort(all, all->getNrMed(),sizeof(Medicine*), (comparefunction) compareNA); 
     return all;} 

我有上面的代码,我的qsort有一些问题。 Vector<Medicine*>*是指向我需要整理的指针数组的指针。 getAll()返回Vector <Medicine*>*。 其中一个问题是,在qsort()我的getNrMed()没有找到,虽然我指定了定义此功能的模块。功能如下:C++中的Qsort困境

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

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

+0

什么是'Vector'?你使用'qsort'似乎是错误的。 – 2013-05-07 18:11:39

+0

'class Vector { private: \t T * Elems; \t int Size; \t int Capacity;' +构造函数,析构函数和getter – Matt 2013-05-07 18:13:08

+3

您可能想描述“我的qsort有一些问题”是什么意思,是否因为无法支付抵押贷款而抑郁?使用'std :: sort()',因为'qsort()'使用'memcpy()'来交换对象,这并不总是适用于C++对象。 – 2013-05-07 18:24:25

回答

1

qsort不需要Vector<T>*。它需要一个指向矢量第一个元素的指针。

getNrMed不是Vector<T>的方法,它是MedRepository的一种方法,在这段代码中没有其他地方可以看到。

事实上,你需要在compareNA上进行演员表演是一个严重问题的标志。这几乎是绝不会可以安全地投射一个函数指针。你需要在没有演员的情况下编译它。

毫无疑问,考虑到代码的质量,这里还有其他的问题 - 这就是在您提供的代码数量有限的情况下可以诊断的问题。

+0

我该如何在没有投射的情况下编译它?觉得我应该在上面的碎片旁边展示? – Matt 2013-05-07 18:33:24

+1

为了使它无需强制转换,只需将函数原型更改为'qsort()'预期的函数原型。该比较函数中的第一件事是将void指针转换回类型指针。做自己的忙,并尝试用这个来排序一个简单的整数数组,即创建一个单独的测试项目来熟悉这个。 – 2013-05-07 18:59:42

+1

男人,你超出你的深度。你看起来很有工作,你可以去找另一位工程师并亲自去寻求帮助吗?如果你不知道自己在做什么,试图通过SO进行调试将会是一场噩梦。 – StilesCrisis 2013-05-07 19:18:11