我试图制作一个更通用的过滤器,所以我用typedef定义了一个指向函数的指针。但是我在DynamicVector * filterByQuantity(int quantity)函数中收到错误。这是我想要做的整个代码:
或者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;
}
错误是: 此行有多个标记 - &#39; filter2&#39;没有在这宣布 范围 - 功能&#39; filter2&#39;不可能 解决
我在哪里做错了? filter2函数返回一个DynamicVector,所以我不明白它为什么不起作用。
答案 0 :(得分:1)
因为filter2的声明及其实现不同。
看看你是如何在第2行进行原型设计以及如何实现它的。 Filter2
应该被声明为Controller
范围的一部分,或者作为全局范围的一部分,而不是两者。