関数ポインタ配列

[戻る]
マキ [E-Mail] 2006/01/31(火) 11:17:43
はじめて質問させていただきます。

現在、関数ポインタ配列を作成しようとしておりますが
配列を宣言しようとするとコンパイルが通らなくて困ってます。

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
です。
宜しくお願いします。

επιστημη 2006/01/31(火) 11:36:42
×    { 1, (AFUNC)&Test1 },
○    { 1, (AFUNC)&CFunc::Test1 },

επιστημη 2006/01/31(火) 11:39:11
おっと、キャストは不要だ。

×    { 1, (AFUNC)&Test1 },
○    { 1, (AFUNC)&CFunc::Test1 },
◎    { 1, &CFunc::Test1 },

マキ [E-Mail] 2006/01/31(火) 11:49:30
>επιστημηさん
ありがとうございます。
おかげで解決することができました。

Blue 2006/01/31(火) 11:52:57
呼び出すほうは、__thiscallだからインスタンスがほしいのは理解できているのかな。
# 理解できているのならばスイマセン。

CFunc f;
( f.*MESSAGE_MAP_TABLE[ 0 ].pfn )();

みたいに。

CFuncが(staticな)メンバ変数を使用しない(関数群の)クラスならば、staticメソッドに
してしまうほうがよさそうですけどね。

Blue 2006/01/31(火) 11:54:20
間違えました。
> CFuncが(staticな)メンバ変数を使用しない
CFuncが(staticでない)メンバ変数を使用しない

でした。

マキ [E-Mail] 2006/01/31(火) 12:24:45
>Blueさん
ありがとうございます。
インスタンスが必要なのは理解しています。
もう一度確認してみたところ、typedef void (CFunc::*AFUNC)();
のclass名を間違えていたためコンパイルできなかったみたいです。
実際はclass CEventManagerでCEventManaberとしていたようでした・・・。
だから何をやっても関数が無い訳でした。


>επιστημηさん
わざわざすみません。

皆さんまた宜しくお願いします。

(忘れ物) 2006/01/31(火) 12:34:35
□←解決時は質問者本人がここをチェックしてください。

マキ [E-Mail] 2006/01/31(火) 14:24:57
[[解決]]
>(忘れ物) さん
ごめんなさい。

古いスレッドには追加発言できません。