1

我正在尝试制作一个更通用的过滤器,所以我用 typedef 定义了一个指向函数的指针。但我在 DynamicVector* filterByQuantity(int quantity) 函数中收到错误消息。这是我正在尝试做的整个代码:

控制器.h

typedef int (*filterFunc)(Medicine* criteria, Medicine*);
DynamicVector<Medicine>* filter2(Medicine* criteria, filterFunc f);

控制器.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,所以我不明白为什么它不起作用。

4

1 回答 1

1

因为 filter2的声明实现不同。

看看你是如何在第 2 行进行原型设计的,以及你是如何实现它的。Filter2应该声明为Controller范围的一部分或全局范围的一部分,而不是两者。

于 2013-04-06T11:21:16.033 回答