Я пытаюсь создать более общий фильтр, поэтому я определил с помощью 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;
}
ошибку является: Множественные маркеры на этой линии - ' фильтр2 'не был объявлен в этом scope - Функция' filter2 'не может быть разрешено
Где я делаю неправильно? Функция filter2 возвращает DynamicVector, поэтому я не понимаю, почему она не работает.
Это не работает, потому что у вас есть 'Controller :: filter2', а не только' filter2'. Я уверен, что этот код не будет использоваться, чтобы выписывать лекарства для реальных людей. – lapk
Помимо острой проблемы у вас есть, все «новые» вещи придут к вам с утечками памяти, особенно при наличии исключений. Это не Java, у которого есть сбор мусора, но C++, который требует от вас использования интеллектуальных указателей для получения аналогичного поведения. Однако вместо указателей предпочтительным является использование простых объектов. Кроме того, вы выбрасываете преимущества проверки целостности компилятора const-correctness. –