メンバ関数へのポインタ配列 – プログラミング – Home

メンバ関数へのポインタ配列
 
通知
すべてクリア

[解決済] メンバ関数へのポインタ配列


song
 song
(@song)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

タイトルにあるとおりの質問なんですが、
こういったエラーが出ます。
C言語でのプログラムと何がちがうかわかりません。
何か参考になるものなど教えてください。

: '*' : オペランドが不正です。
: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。

VC++6.0でMFC AppWizardにてダイアログベースで新規作成したダイアログクラスに
以下のように追加しました。

ヘッダー追加
private:
void (CSampleDlg:: *pf[2][2])(void);
void test0101(void);
void test0102(void);
void test0201(void);
void test0202(void);
ソース追加
BOOL CSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。
//↓追加
pf[0][0] = test0101;
pf[0][1] = test0102;
pf[1][0] = test0201;
pf[1][1] = test0202;

(*pf[0][0])();    //←ここでエラーが出ます。
//↑以上
return TRUE;
}

//↓追加
void CSampleDlg::test0101(){}
void CSampleDlg::test0102(){}
void CSampleDlg::test0201(){}
void CSampleDlg::test0202(){}
//↑以上

よろしくお願いします。


引用未解決
トピックタグ
waki
 waki
(@waki)
ゲスト
結合: 21年前
投稿: 2
 

メンバ関数の呼び出しは対象となるオブジェクトを必要とします。
なので、
(this->*pf[0][0])();
とします。


返信引用
song
 song
(@song)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

どうもありがとうございます。
初めて知りました。まだまだ勉強不足ですね。
ほかのページでは関数ポインタ用のテンプレートを作成していたので
とても難しく考えていました。
これからもなにかあればよろしくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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