函数无法解析C++
我想做一个更通用的过滤器,所以我用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,所以我不明白为什么它不起作用。
因为filter2的声明及其实施的不同。
看看你如何在第2行进行原型设计以及如何实现它。 Filter2
应作为Controller
作用域的一部分或作为全局作用域的一部分声明,而不是两者。
我在做一个模块化程序。 filter2的声明位于controller.h中,并在controller.cpp中执行 – user1849859 2013-04-06 11:31:24
@ user1849859这是无关紧要的。你可以将它们分离成头文件和实现文件,但是你仍然需要在Controller类中声明这个函数。 – 2013-04-06 11:33:30
@KonradRudolph我该怎么做?我真的不明白 – user1849859 2013-04-06 11:36:06
它不起作用,因为你有'Controller :: filter2',而不仅仅是'filter2'定义...我当然希望这个代码不会被用来为真正的人开药。 – lapk 2013-04-06 11:17:28
除了您遇到的严重问题之外,所有“新”内容都会随着内存泄漏而出现,尤其是在出现异常情况时。这不是Java,它有一个垃圾收集,但是C++要求你使用智能指针来获得类似的行为。除了指针之外,使用普通对象更可取。此外,您正在抛弃编译器检查const正确性的好处。 – 2013-04-06 12:08:58