2013-05-07 61 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