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

所以,我有以上這應該排序objects.I陣列功能得到錯誤多個製造商和類型轉換

cannot convert 'Vector<Medicine*>' to 'Vector<Medicine*>*' in initialization 

但是如果我把它寫成Vector<Medicine*> all =repo->getAll();我收到了一堆新對於第三行的錯誤(這是不存在,如果我有一,二號線以前的錯誤):

Multiple markers at this line 
    - Method 'getSize' could not be resolved 
    - Invalid arguments ' Candidates are: void qsort(void *, unsigned int, unsigned int, int (*)(const void *, const 
    void *)) ' 
    - base operand of '->' has non-pointer type 'Vector<Medicine*>' 

什麼不對的,我該如何解決?

+0

'repo-> getAll()'返回什麼? – stardust 2013-05-07 10:36:31

+1

很多事情都是錯誤的,我甚至從哪裏開始?你有一個函數,聽起來像一條指令去做某件事,但然後返回一些東西。你使用qsort。你投了一個函數指針。你不明白指針,引用和值之間的區別。你有一個指針向量,你也會返回一個(或者甚至是一個指向向量指針的指針),這從所有權角度來看是完全混淆的。基本上,問題是你不知道C++。爲了解決這個問題,我建議你閱讀一本好書。 – 2013-05-07 10:36:56

+0

@命名爲Vector的所有對象Vector Matt 2013-05-07 10:45:23

回答

1

試試這個:

Vector<Medicine*> Controller::getMedicinesSortedByStockAsc() { 
    Vector<Medicine*> all = repo->getAll(); 
    std::sort(all.begin(), all.end(), compareNA); 
    return all; 
} 

注:

  • 你沒有提供的Vector的定義,所以我認爲它是STL兼容。從其他代碼來看,這可能是一個不正確的假設。
  • 您沒有提供compareNA的描述,但我選擇假定它可以與STL樣式算法兼容。
+0

'class Vector { private: \t T * Elems; \t int Size; \t int Capacity;' ... +構造函數,析構函數,getters。 – Matt 2013-05-07 13:43:59

+0

int compareNA(const Medicine * e1,const Medicine * e2){ \t int q1 =(*(Medicine **)e1) - > getStock(); \t int q2 =(*(Medicine **)e2) - > getStock(); \t if(q1 Q2){ \t \t \t返回1; \t \t} \t \t return 0; \t} }' – Matt 2013-05-07 13:44:24

+0

我tryed你的版本,但我得到這個錯誤:在該行 _Multiple標記 \t - 參數無效「考生:無效的排序(#0,#0)無效的排序(#0, \t#0,#1)' \t - 方法「開始」無法解析 \t - 方法'結束'無法解決_ – Matt 2013-05-07 13:46:11