クラスの関数ポインタがうまくいきません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
つくばさん
記事: 22
登録日時: 4年前

クラスの関数ポインタがうまくいきません

#1

投稿記事 by つくばさん » 4年前

++,プログラミングを始めたばかりのものです。
プログラム中によくわからないことが起こったので質問させていただきます。
今回
http://dixq.net/forum/blog.php?u=53&b=5962
を参考にして関数の管理をしようとして次のようなプログラムを組みました。

コード:

#include "DxLib.h"
#include <vector>
 
using namespace std;

class CPointer{
protected:
	void Func00();
	void Func01();
	void Func02();
public:
typedef void (CPointer::*FUNC)();
	vector<FUNC> mFuncPtr;

	void setFunc();
};
 
void CPointer::setFunc(){
	mFuncPtr.push_back(&CPointer::Func00);
	mFuncPtr.push_back(&CPointer::Func01);
	mFuncPtr.push_back(&CPointer::Func02);
}
void CPointer::Func00(){printfDx("FUNC00");}
void CPointer::Func01(){printfDx("FUNC01");}
void CPointer::Func02(){printfDx("FUNC02");}


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	SetUseFPUPreserveFlag(TRUE);
	ChangeWindowMode(TRUE), DxLib_Init(); //ウィンドウモード変更
	CPointer* test;
	test = new CPointer;
	test->setFunc();
	test->mFuncPtr[0]();

	WaitKey();
	DxLib_End();// DXライブラリ終了処理
	return 0;
}
すると

コード:

error C2064: 0 引数を取り込む関数には評価されません。
というエラーが出ました。
環境は環境は
win7 64bit
VC++ 2010 Express
DxLIb
です。
url に書かれてるようにするにはどうすればいいのでしょうか?
初心者ですがよろしくお願いします。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: クラスの関数ポインタがうまくいきません

#2

投稿記事 by みけCAT » 4年前

メンバ関数を呼ぶにはその関数を呼ばれるオブジェクトのインスタンスを指定しないといけないので、

コード:

test->mFuncPtr[0]();
のかわりに

コード:

(test->*test->mFuncPtr[0])();
とするといいようです。

c++ - How do I call a pointer-to-member-function? - Stack Overflow
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

つくばさん
記事: 22
登録日時: 4年前

Re: クラスの関数ポインタがうまくいきません

#3

投稿記事 by つくばさん » 4年前

みけCATさんありがとうございました。
おっしゃられている通りに直すとしっかり作動しました。
ご協力ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る