以下のコードを若干修正し、
http://dixq.net/forum/viewtopic.php?f=3&t=3644#p30417
以下のコードを書きました。(コード欄を参照)
o 変更点
- Func fc[7] をTest classのメンバから、グローバル変数へと修正。
- FuncA-FuncGをpublicに変更。
o 問題
以下のコンパイルエラーが発生します。
-----------------------------------------------------------------------------------
func_ptr5.cpp:89:8: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘fc[0] (...)’, e.g. ‘(... ->* fc[0]) (...)’
fc[0]();
^
-----------------------------------------------------------------------------------
o やりたいこと
classのpublic 関数へのポインタを、初期化時にclass外の変数にコピーし、
オブジェクト生成後、その変数を利用し、class外から関数にアクセスできるようにしたい。
o 疑問
class外から、これらの関数にどのようにアクセスすればよいかがわかりません。
もしご存知の方がいらっしゃったらご教授いただけないでしょうか?
o コード
#include <iostream>
using namespace std;
#include<stdio.h>
class Test;
typedef void(Test::*Func)();
Func fc[7];
class Test{
public:
Test();
~Test();
void Top(void);
//private:
void FuncA(void);
void FuncB(void);
void FuncC(void);
void FuncD(void);
void FuncE(void);
void FuncF(void);
void FuncG(void);
};
Test::Test()
{
fc[0] = &Test::FuncA;
fc[1] = &Test::FuncB;
fc[2] = &Test::FuncC;
fc[3] = &Test::FuncD;
fc[4] = &Test::FuncE;
fc[5] = &Test::FuncF;
fc[6] = &Test::FuncG;
}
Test::~Test()
{
}
void Test::Top(void)
{
/* for(int i = 0; i < 7; i++) */
/* (this->*fc[i])(); */
}
void Test::FuncA(void)
{
printf("お茶\n");
}
void Test::FuncB(void)
{
printf("ほうじ茶\n");
}
void Test::FuncC(void)
{
printf("はと麦茶\n");
}
void Test::FuncD(void)
{
printf("プーアール茶\n");
}
void Test::FuncE(void)
{
printf("シルベスタギムネマ茶\n");
}
void Test::FuncF(void)
{
printf("梅こぶ茶\n");
}
void Test::FuncG(void)
{
printf("玉露\n");
}
int main(void)
{
Test test;
//test.Top();
fc[0]();
return(0);
}