理解できないコンパイルエラー(MS VS 2008)が発生します。何時間もそれをいじった後、それはすべてぼやけており、私が見逃している非常に明白な(そして非常に愚かな)何かがあるように感じます。重要なコードは次のとおりです。
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;
}
コンパイラーは矢印で「項は1つの引数を取る関数に評価されない」と主張しています。なぜだめですか?PFNは、1つの引数を取る関数としてプロトタイプ化され、MAP_ENTRY.pfnはPFNです。ここで何が欠けていますか?