関数ポインタ配列 – プログラミング – Home

通知
すべてクリア

[解決済] 関数ポインタ配列


マキ
 マキ
(@マキ)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

はじめて質問させていただきます。

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

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

おっと、キャストは不要だ。

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


返信引用
マキ
 マキ
(@マキ)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

>επιστημηさん
ありがとうございます。
おかげで解決することができました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

呼び出すほうは、__thiscallだからインスタンスがほしいのは理解できているのかな。
# 理解できているのならばスイマセン。

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

みたいに。

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

間違えました。
> CFuncが(staticな)メンバ変数を使用しない
CFuncが(staticでない)メンバ変数を使用しない

でした。


返信引用
マキ
 マキ
(@マキ)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

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

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

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


返信引用
(忘れ物)
 (忘れ物)
(@(忘れ物))
ゲスト
結合: 19年前
投稿: 1
 

□←解決時は質問者本人がここをチェックしてください。


返信引用
マキ
 マキ
(@マキ)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

>(忘れ物) さん
ごめんなさい。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました