我想做一個更通用的過濾器,所以我用typedef定義了一個指向函數的指針。但是我在DynamicVector * filterByQuantity(int quantity)函數中收到錯誤。這是什麼,我試圖做全碼:函數無法解析C++
或者Controller.h
typedef int (*filterFunc)(Medicine* criteria, Medicine*);
DynamicVector<Medicine>* filter2(Medicine* criteria, filterFunc f);
controller.cpp
#include "controller.h"
int filterByQuantityLess(Medicine* criteria, Medicine* p) {
if (criteria->getQuantity() > p->getQuantity()) {
return 0;
}
return 1;
}
DynamicVector<Medicine>* Controller::filter2(Medicine* criteria, filterFunc f){
DynamicVector<Medicine>* medList = repo->getAll();
DynamicVector<Medicine>* rez = new DynamicVector<Medicine>();
for(int i=0; i < medList->getLen(); i++){
Medicine* m = new Medicine(medList->getElementAtPosition(i));
if(!f(criteria, m)){
rez->addElement(*m);
}
}
return rez;
}
DynamicVector<Medicine>* filterByQuantity(int quantity){
Medicine* criteria = new Medicine(1,"",1,quantity);
DynamicVector<Medicine>* rez = filter2(criteria, filterByQuantityLess); //error
return rez;
}
錯誤的是:在這行 多個標記 - 「 filter2'未在此 範圍內聲明 - 函數'filter2'不能被解析爲
我在哪裏做錯了? filter2函數返回一個DynamicVector,所以我不明白爲什麼它不起作用。
它不起作用,因爲你有'Controller :: filter2',而不僅僅是'filter2'定義...我當然希望這個代碼不會被用來爲真正的人開藥。 – lapk 2013-04-06 11:17:28
除了您遇到的嚴重問題之外,所有「新」內容都會隨着內存泄漏而出現,尤其是在出現異常情況時。這不是Java,它有一個垃圾收集,但是C++要求你使用智能指針來獲得類似的行爲。除了指針之外,使用普通對象更可取。此外,您正在拋棄編譯器檢查const正確性的好處。 – 2013-04-06 12:08:58