我试图制作一个更通用的过滤器,所以我用 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;
}
错误是: 此行有多个标记 - 在此未声明“filter2” 范围 - 函数“filter2”不能 已解决
我哪里做错了? filter2 函数返回一个 DynamicVector,所以我不明白为什么它不起作用。
最佳答案
因为 filter2 的声明和它的实现不同。
在第 2 行查看您如何制作原型(prototype)以及如何实现它。 Filter2
应该声明为 Controller
范围的一部分或全局范围的一部分,而不是两者。
关于c++ - 函数无法解析 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850128/