はじめて質問させていただきます。
現在、関数ポインタ配列を作成しようとしておりますが
配列を宣言しようとするとコンパイルが通らなくて困ってます。
class CFunc
{
public:
void Test1();
void Test2();
};
class A
{
};
// A.cpp内
typedef void (CFunc::*AFUNC)();
typedef struct _STRUCT_EVENT_MAP
{
UINT nEvent;
AFUNC pfn
} STRUCT_EVENT_MAP;
const STRUCT_EVENT_MAP MESSAGE_MAP_TABLE[] =
{
{ 1, (AFUNC)&Test1 },
{ 1, (AFUNC)&Test2 },
};
エラー内容です。
error C2065: 'Test1' : undeclared identifier
error C2440: 'type cast' : cannot convert from 'int *' to 'void (__thiscall
CFunc::*)(void)'
There is no context in which this conversion is possible
VC6.0
MFC
です。
宜しくお願いします。
× { 1, (AFUNC)&Test1 },
○ { 1, (AFUNC)&CFunc::Test1 },
おっと、キャストは不要だ。
× { 1, (AFUNC)&Test1 },
○ { 1, (AFUNC)&CFunc::Test1 },
◎ { 1, &CFunc::Test1 },
>επιστημηさん
ありがとうございます。
おかげで解決することができました。
呼び出すほうは、__thiscallだからインスタンスがほしいのは理解できているのかな。
# 理解できているのならばスイマセン。
CFunc f;
( f.*MESSAGE_MAP_TABLE[ 0 ].pfn )();
みたいに。
CFuncが(staticな)メンバ変数を使用しない(関数群の)クラスならば、staticメソッドに
してしまうほうがよさそうですけどね。
間違えました。
> CFuncが(staticな)メンバ変数を使用しない
CFuncが(staticでない)メンバ変数を使用しない
でした。
>Blueさん
ありがとうございます。
インスタンスが必要なのは理解しています。
もう一度確認してみたところ、typedef void (CFunc::*AFUNC)();
のclass名を間違えていたためコンパイルできなかったみたいです。
実際はclass CEventManagerでCEventManaberとしていたようでした・・・。
だから何をやっても関数が無い訳でした。
>επιστημηさん
わざわざすみません。
皆さんまた宜しくお願いします。
□←解決時は質問者本人がここをチェックしてください。
>(忘れ物) さん
ごめんなさい。