函数无法解析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,所以我不明白为什么它不起作用。

+1

它不起作用,因为你有'Controller :: filter2',而不仅仅是'filter2'定义...我当然希望这个代码不会被用来为真正的人开药。 – lapk 2013-04-06 11:17:28

+0

除了您遇到的严重问题之外,所有“新”内容都会随着内存泄漏而出现,尤其是在出现异常情况时。这不是Java,它有一个垃圾收集,但是C++要求你使用智能指针来获得类似的行为。除了指针之外,使用普通对象更可取。此外,您正在抛弃编译器检查const正确性的好处。 – 2013-04-06 12:08:58

因为filter2的声明及其实施的不同。

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

+0

我在做一个模块化程序。 filter2的声明位于controller.h中,并在controller.cpp中执行 – user1849859 2013-04-06 11:31:24

+1

@ user1849859这是无关紧要的。你可以将它们分离成头文件和实现文件,但是你仍然需要在Controller类中声明这个函数。 – 2013-04-06 11:33:30

+0

@KonradRudolph我该怎么做?我真的不明白 – user1849859 2013-04-06 11:36:06