関数ポインタについて質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
akio

関数ポインタについて質問

#1

投稿記事 by akio » 16年前

はじめまして。
龍神録プログラミングの館12を参考にクラス化しようとしたのですが、そこで詰まってしまいました。
ゲームプログラミングとは直接関係なく、またC++の内容になってしまうのですが、ご回答頂けたらと思い書き込ませていただきした。

class A{
public:
	static void pat01(int i){}
	static void (*p)(int);
};
void (A::*p)(int) = &A::pat01;
pat01関数は龍神録プログラミングの館12にあるenemy_pattern~関数です。
と、こんな感じでクラスにまとめてみようと思ったのですが、関数ポインタのメンバ変数(?)がちゃんと定義されないみたいなんです。
私的には「void (A::*p)(int) = &A::pat01;」で定義しているつもりなのですが、コンパイラ的にはどうやらグローバルなメンバ関数ポインタと解釈しているようです。

というわけで、どう書いたらちゃんと定義されるのでしょうか?
どうかよろしくお願いします。

SCI

Re:関数ポインタについて質問

#2

投稿記事 by SCI » 16年前

void (*A::p)(int) = &A::pat01;
にしてみてください。

akio

Re:関数ポインタについて質問

#3

投稿記事 by akio » 16年前

SCIさんありがとうございます、解決しました。
なるほど、おそらくクラス名::変数名で1セットと考えればいいのですね。

さて、需要はないような気がしますが一応コードを載せておきますね。
class A{
public:
	static void (*p[/url])(int);
private:
	static void pat01(int i){}
	static void pat02(int i){}
	static void pat03(int i){}

	const static int MAX = 10;
};
void (*A::p[MAX])(int) = {
	&A::pat01,&A::pat02,&A::pat03,
};

void main(){
	A a;
	(a.p[0])(0);
}

閉鎖

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