クラスでのポインタ関数 – プログラミング – Home

クラスでのポインタ関数
 
通知
すべてクリア

[解決済] クラスでのポインタ関数


ザンギェ
 ザンギェ
(@ザンギェ)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

クラスで定義された関数をポインタ関数として持たせたいのですが、
どうしてもキャストできませんといわれてしまいます。
実際は、下のような使い方をしたいのですが、どなたか方法をお教えください。
class tor
{
public:
tor(void);
void test1(void); // 処理1
void test2(void); // 処理2
void test3(void); // 処理3
void test4(void); // 処理4
};
tor::tor(void){}
void tor::test1(void){}
void tor::test2(void){}
void tor::test3(void){}
void tor::test4(void){}

void main()
{
tor aa;
{
void (*loop[])(void)={ // ポインタ関数
(void (*)(void))test1, // エラー キャスト変換できません
(void (*)(void))test2, // エラー キャスト変換できません
(void (*)(void))test3, // エラー キャスト変換できません
(void (*)(void))test4, // エラー キャスト変換できません
};
// ココの処理をさせたい
for(int i=0;i<4;i++)
{
loop[i]();
}
}
}


引用未解決
トピックタグ
ザンギェ
 ザンギェ
(@ザンギェ)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

すいません。少々、訂正をさせていただきました。
こちらが本当に行いたかった処理の内容です。
どうか お願いします。
class tor
{
public:
tor(void);
void test1(void); // 処理1
void test2(void); // 処理2
void test3(void); // 処理3
void test4(void); // 処理4
void main(void);
};
tor::tor(void){}
void tor::test1(void){}
void tor::test2(void){}
void tor::test3(void){}
void tor::test4(void){}
void tor::main(void)
{
void (*loop[])(void)={ // ポインタ関数
(void (*)(void))tor::test1, // エラー キャスト変換できません
(void (*)(void))tor::test2, // エラー キャスト変換できません
(void (*)(void))tor::test3, // エラー キャスト変換できません
(void (*)(void))tor::test4, // エラー キャスト変換できません
};
// ココの処理をさせたい
for(int i=0;i<4;i++)
{
loop[i]();
}
}

void main()
{
tor aa;
aa.main();
}


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

エラーメッセージをしっかり読みましょう。
この場合は、『XXXからYYYへのキャストはできません』みたいな
メッセージが表示されるはずです。(XXXが正しい宣言の型)
これは、クラスメンバへのポインタなので、
void (tor::*loop[])(void)={
と書くのが正解だと思います。
また、呼び出し部分もこれではエラーになると思います。
詳細は、MSDNで調べてください。
たぶん、『クラス メンバ ポインタ』あたりで検索をか
けると、出てくると思います。
(試してないのでキーワードは臨機応変に)
#でも、この書き方ってメンテナンス性はいいのかなあ?


返信引用
ザンギェ
 ザンギェ
(@ザンギェ)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

ヘルプを見てなんとか呼び出すことに成功しました。
どうもありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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