Sadece anlamadığım bir derleme hatası alıyorum (MS VS 2008). Birçok saat boyunca uğraştıktan sonra, her şey bulanık ve eksik olduğum çok açık (ve çok aptalca) bir şey varmış gibi hissediyorum. "Terimi 1 argüman alan bir işleve değerlendirmek değil" ok atİşaretçi-üye işlevini nasıl ararım?
typedef int (C::*PFN)(int);
struct MAP_ENTRY
{
int id;
PFN pfn;
};
class C
{
...
int Dispatch(int, int);
MAP_ENTRY *pMap;
...
};
int C::Dispatch(int id, int val)
{
for (MAP_ENTRY *p = pMap; p->id != 0; ++p)
{
if (p->id == id)
return p->pfn(val); // <--- error here
}
return 0;
}
derleyici iddialar: Aşağıda temel kod. Neden olmasın? PFN bir argüman alarak bir fonksiyon olarak prototiplenir ve MAP_ENTRY.pfn bir PFN'dir. Burada neyi özlüyorum?
C sözdizimi paslıdır, bu nedenle yanıt olarak eklememelidir, "return (* (p-> pfn)) (val);"? - –
Nope, "C :: PFN türünde işlenenler üzerinde" * hatası veren hata. – chrisd
[Bir işlev işaretçisi aracılığıyla C++ sınıf yöntemlerini çağırma] 'nın olası kopyası (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a-function-pointer) –