2013-04-06 150 views
3

傢伙!我試圖做到這一點:指針函數C++

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

,但我得到一個錯誤:「filterFunc」不是一個類型

我試圖做到這一點,因爲我想一般的過濾器,那麼我可以這樣做:

int filterPrice(Pet* pet) { 
    if (pet->price > 10 && pet->price < 100) { 
     return 0; 
    } 
    return 1; 
} 

VectorDinamic* filter2(Pet* criteria, filterFunc f) { 
    VectorDinamic* v = getAll(ctr->repo); 
    VectorDinamic* rez = creazaVectorDinamic(); 
    int nrElems = getNrElemente(v); 
    int i; 
    for (i = 0; i < nrElems; i++) { 
     Pet* pet = get(v, i); 
     if (!f(criteria, pet)) { 
      add(rez, copyPet(pet)); 
     } 
    } 
    return rez; 
} 

VectorDinamic* filterByPrice(float price) { 
    Pet* criteria = createPet(1, "", "", price); 
    VectorDinamic* rez = filter2(ctr, criteria, filterByPriceGr); 
    destroyPet(criteria); 
    return rez; 
} 

我該如何解決這個問題?

回答

9

你忘了typedef,申報類型。否則,該聲明只是創建int(*)(Medicine*,Medicine*)類型的變量。

typedef int (*filterFunc)(Medicine* criteria, Medicine*); 
//^^^^^^^ 
+0

如果你還記得的聲明可以使用的typedef變成一種類型,它更容易閱讀和寫:'的typedef INT filter_function(醫學*,醫藥*)'然後你可以作爲'filter_function使用* F',這也並不模糊的事實,這是一個指針。 – 2013-04-06 12:15:07