関数ポインタの引数について

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

関数ポインタの引数について

#1

投稿記事 by ひよこ » 15年前

関数ポインタの引数についてなんですが、敵の行動パターン制御で龍神録では関数ポインタを使っていて
私もそれを利用しようと改造してみたら、うまくいきません。調べてみるとうまく代入されてないようで、
おそらく関数ポインタの引数が原因ではないかという結論に至りました。
しかし、これだと思うものにしてみたら、コンパイルが通りません。
どうすればいいでしょうか?
extern void enemy_pattern0(enemy_t *enemy);

void (*enemy_pattern[ENEMY_PATTERN_MAX])(enemy_t *enemy) = {
    enemy_pattern0(enemy), 
};
void calc_enemy(){
	enemy_t *p;
	p=head_enemy;
	if(p!=NULL)
		while(p!=NULL){
			if(p->flag==1){
				if(p->pattern<ENEMY_PATTERN_MAX)
					enemy_pattern[p->pattern](p);
			}
			p=p->next;
		}
		
}
//移動パターン0
//下がってきて停滞して上がっていく
void enemy_pattern0(enemy_t *enemy){
    int t=enemy->cnt;
    if(t==0)
        enemy->vy=3;//下がってくる
    if(t==40)
        enemy->vy=0;//止まる
    if(t==enemy->wait)//登録された停滞時間だけして
        enemy->vy=-3;//上がっていく
}

box

Re:関数ポインタの引数について

#2

投稿記事 by box » 15年前

> しかし、これだと思うものにしてみたら、コンパイルが通りません。
> どうすればいいでしょうか?

まずは、そのときのエラーメッセージを提示しましょう。

ひよこ

Re:関数ポインタの引数について

#3

投稿記事 by ひよこ » 15年前

>d:\マイドキュメント\ダウンロード\dxlib_vc\リスト構造勉強用 シューティング - 2\その3\mydat\source\enemy.cpp(107) : error C2065: 'enemy' : 定義されていない識別子です。

box

Re:関数ポインタの引数について

#4

投稿記事 by box » 15年前

関数ポインタを使った簡単な例を書いてみました。
参考になるかどうかはわかりません。


#include <stdio.h>

typedef int (*FUNC)(int, int);

int add(int m, int n)
{
    return m + n;
}

int sub(int m, int n)
{
    return m - n;
}

int main(void)
{
    FUNC funcs[/url] = { add, sub };

    printf("%d\n", funcs[0](123, 456));
    printf("%d\n", funcs[1](123, 456));
    return 0;
}

ひよこ

Re:関数ポインタの引数について

#5

投稿記事 by ひよこ » 15年前

ちょっと参考になりづらいです。
自分のソースのどこが悪いのでしょうか?

Justy

Re:関数ポインタの引数について

#6

投稿記事 by Justy » 15年前


>自分のソースのどこが悪いのでしょうか

 龍神録のコードと見比べてみました?
(特に enemy_pattern配列のあたり)

ひよこ

Re:関数ポインタの引数について

#7

投稿記事 by ひよこ » 15年前

見比べてみたところ違うところはなく、(int)は型名だと思い型をいれてます。
すみません。ソースを見返していたらenemy->waitの値が40より下だったので、
40以降止まって見えてたのが原因のようです。
boxさん、Justyさんありがとうございました。

ひよこ

Re:関数ポインタの引数について

#8

投稿記事 by ひよこ » 15年前

解決しました。

閉鎖

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