1

より一般的なフィルターを作成しようとしているので、関数へのポインターを typedef で定義しました。しかし、DynamicVector* filterByQuantity(int quantity) 関数でエラーが発生します。これは私がやろうとしていることのコード全体です:

controller.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 に答える