24章にてエラー、引数を取り込む関数には…

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

24章にてエラー、引数を取り込む関数には…

#1

投稿記事 by SH » 16年前

何度も何度も申し訳ないです・・・。
龍神録プログラミング24章の
boss_shot_main関数内の

boss_shot_bullet[boss.knd]();//弾幕関数へ

これに対してエラー
「引数を取り込む関数には評価されません。」とでてしまいます。
このエラーを検索したところ
変数と関数で同じ名前を使用すると発生する と書いてあるのですが、
変数と関数は別の名前にしてありますし、龍神録プログラミングのサンプルと見比べても
どこが間違っているのか分かりません。
22章、23章のボム製作のところをスキップし、49章のホーミングを実装した他、
いくつか画像を変えたぐらいの改変しか行っていないのでそれが原因とは思えません。

どうすれば解決できるでしょうか…

array

Re:24章にてエラー、引数を取り込む関数には…

#2

投稿記事 by array » 16年前

確かですけど。
--- define.h ---
//弾幕最大数
#define DANMAKU_MAX 50

の数値を弾幕データ数がオーバーしてるかもしれないです。

それか--- func.h ---の中身に問題があるかだと思います。

toyo

Re:24章にてエラー、引数を取り込む関数には…

#3

投稿記事 by toyo » 16年前

24章では弾幕関数が1個しか登録してないようですね
void (*boss_shot_bullet[DANMAKU_MAX])() =
{
	boss_shot_bulletH000,
};
boss_shot_bullet[boss.knd]();
でboss.kndが0以外だと「引数を取り込む関数には評価されません。」というエラーが出るのでしょう。(日本語になってないエラーメッセージですね)

SH

Re:24章にてエラー、引数を取り込む関数には…

#4

投稿記事 by SH » 16年前

回答してくれた方々、有難うございます…
弾幕データ数はshotH.cppの方は多少増やしたものの、boss_shotH.cppの方は
24章プログラミングをコピーしたような状態になっていますので、まだ1つだけです。
func.hも同様なので、そこに問題があるようには思えません…
boss.kndも弄くってみましたが、変化は見られないようです…

array

Re:24章にてエラー、引数を取り込む関数には…

#5

投稿記事 by array » 16年前

ちなみにSHさんのエラーは、ゲーム実行時のエラーになるのでしょうか?

多分toyoさんの回答が原因だと思います。

言われてるとおり、boss.kndが0以外の数値になるとその時点でエラーが起こります。

私も以前似たようなエラーがあったと思い試してみたのですが・・・
boss.kndが0以外だと「読み込み中にアクセス違反が発生しました」とエラーがでてゲームが中断されます。

ボスを倒すと、void enter_boss(int num)が実行され
boss.knd++;
で加算するので、boss.kndが1になります。
これが原因でエラーになるのではないでしょうか?

SH

Re:24章にてエラー、引数を取り込む関数には…

#6

投稿記事 by SH » 16年前

ビルド時のエラーです
この時点ではボスに当たり判定がないので
boss_knd++;
によってboss_kndの値が加算されることはありません…
enter_boss関数では最初にboss_kndの値が-1になっていますが、
これを0や他の値に変えたり、boss_knd++を消しても変化はありませんでした。

boss_shot_main関数内の
boss_shot_bullet[boss.knd](); にマウスのカーソルをあてると
void (*boss_shot_bullet[3][6][50])(int) と表示されるのですが、
これが原因のような気がしているのですが…

array

Re:24章にてエラー、引数を取り込む関数には…

#7

投稿記事 by array » 16年前

ためしに
--- func.h ---
extern void boss_shot_bulletH000();

void (*boss_shot_bullet[3][6][DANMAKU_MAX])(int) =
{
	boss_shot_bulletH000,
};

と書き換えたら同じエラーを確認できました。

赤文字が原因だと思うのですが・・・。

もしかしたら、
--- boss_shot.cpp ---
の上から2行目
#include "../include/func.h"
となっているのですが、インクルード先のファイルが間違っていませんか?
自分で書いてるらしいので、もしかしたらファイル位置などが間違ってるかも知れませんよ。

今、初めて知った機能なんですが、boss_shot_bullet[boss.knd](); にマウスカーソルを当て
右クリックから「定義へ移動」という機能があるみたいなので便利かもです。

管理人

Re:24章にてエラー、引数を取り込む関数には…

#8

投稿記事 by 管理人 » 16年前

void (*boss_shot_bullet[3][6][50])(int)

これはおかしいです。引数は無いはずです。

void (*boss_shot_bullet[DANMAKU_MAX])();

のはずです。

管理人

Re:24章にてエラー、引数を取り込む関数には…

#9

投稿記事 by 管理人 » 16年前

void (*boss_shot_bullet[3][6][50])(int);

これは以前私が龍神録1の時に使っていた宣言と同じです・・。

1面の最大登録弾幕数が50で、通常ステージ5+EX1の6エリアあり、難易度が3種類と言う意味で。

何かの間違いでどこかのコードに潜り込んだのかもしれません。
そのプロジェクトごと圧縮してこちらで拝見させていただく事はできないでしょうか?

また、参考にされたプログラムは館だけですか?

SH

Re:24章にてエラー、引数を取り込む関数には…

#10

投稿記事 by SH » 16年前

回答していただき、至極感謝しております。

24章の方では「includeフォルダにfunc.hのファイルを追加」と書いてあったのに対し、
自分がVisual C++2008の方から追加したのが原因だったようです。
includeした物が追加したほうではなく、元からあった別のfunc.hをインクルードしてしまったようです。

迷惑をかけてしまい、すみませんでした…

ちなみに参考にしたプログラムは龍神録プログラミングの館のみでした。

閉鎖

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