ページ 11

SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 03:33
by you
はじめまして、龍神録の館を見させてもらいながら頑張ってるyouと申します。
13章の「敵にショットを撃たせてみよう」のところで、指示通りプログラムを打ってみて実行したのですが、

//ショットに関する構造体
typedef struct{
//フラグ、種類、カウンタ、どの敵から発射されたかの番号
int flag,knd,cnt,num;
//ベース角度、ベーススピード
double base_angle[1],base_spd[1];
bullet_t bullet[SHOT_BULLET_MAX];
}shot_t;

の,七行目のSHOT_BULLET_MAXが定義されていない識別子ですというエラーが17個ほど発生してしまいます。

打ち直してみたりしても一向に改善されません。

どうしたらいいのでしょうか?よろしくお願いします。

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 03:51
by BEMANI
>>youさん
「SHOT_BULLET_MAX」 が 「bullet_t bullet[SHOT_BULLET_MAX];」 以前に書かれていなければなりません。

今パッと見てきたところ、

--- define.h に以下を追加 ---
//敵1匹が持つ弾の最大数
#define SHOT_BULLET_MAX 1000

と言うのがありました。
「define.h」に #define SHOT_BULLET_MAX 1000 を記述してみて動きますでしょうか。

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 10:42
by you
>>BENAMIさん
回答ありがとうございます。defineに#define SHOT_BULLET_MAX 1000と記述しましたけど、やはり定義されていない識別子というエラーがでてしまいます。

ほかのSHOT_BULLET_MAXがある行では、エラーがないということがさらによくわからないです。

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 11:04
by MNS
考えられる可能性としては、
・define.h がインクルードされていない
・SHOT_BULLET_MAXに何か余計なもの(空白)などが入っている
などがありますが、どうでしょうか?

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 11:31
by you
>>MNSさん
回答ありがとうございます。define.hの中のSHOT_BULLET_MAXの部分をいじると(例SHOT_BULLET_MAのように)、他の行のSHOT_BULLEET_MAXも定義されていないと言われます。つまり、

//ベース角度、ベーススピード
double base_angle[1],base_spd[1];
bullet_t bullet[SHOT_BULLET_MAX];
}shot_t;

この3行目の記述になにか問題があるんでしょうか? 
それとも、define.hをインクルードするためになにか記述しないといけないのでしょうか?
お願いします。

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 11:50
by pooka
define.hに
#include "struct.h"
と書かれた行があると思いますが、これは一番下の行にありますか?
なければ一番下に書いてみてください。

(#define SHOT_BULLET_MAX 1000を#include "struct.h"の記述より前に書く)

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 12:15
by Tatu
龍神録プログラミングの館の
13章を見てみたところ、そのページだけでは
#define SHOT_BULLET_MAX 1000
などの文をdefine.hのどこに追加すべきなのかが
よくわからないようになっていました。

おそらく、youさんのdefine.hは
#include "struct.h"の後に
これらの文が追加されていると思います。
これだとSHOT_BULLET_MAXを定義する前に
struct.hをインクルードしてしまいます。

//ショットに関する構造体
typedef struct{
//フラグ、種類、カウンタ、どの敵から発射されたかの番号、色
int flag,knd,cnt,num;
//ベース角度、ベーススピード
double base_angle[1],base_spd[1];
bullet_t bullet[SHOT_BULLET_MAX];
}shot_t;

SHOT_BULLET_MAXはまだ定義されていないので
エラーになります。

define.hにかいてある
#define SHOT_BULLET_MAX 1000を
#include "struct.h"の上に書くようにすれば、
このエラーは起きなくなるはずです。

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 12:28
by you
>>pookaさん
回答ありがとうございます。見事にいけました^^ありがとうございました。m(_)m

実行結果の敵が大玉しか撃ってこないのですが、あの章のプログラムではそれであってるんですかね?^^;

さすがに質問変わったら書くとこ新しくした方がいいのでしょうか?

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 12:48
by pooka
>実行結果の敵が大玉しか撃ってこない
csvファイルの弾種類の所を確認してみてください。
11章や12章のままなら全部0になっていると思うので、
その数字を変更してみてください。

Re:SHOT_BULLET_MAX

Posted: 2009年6月07日(日) 13:13
by you
>>pookaさん
回答ありがとうございます。無事できました。本当にありがとうございました。

>>tatuさん
回答ありがとうございます。見落としてしまっていたようで大変申し訳ありません。わかりやすい説明ありがとうございます^^

>>BEMANIさん
名前間違って表記してしまいました。申し訳ありません。

みなさん本当にありがとうございました^^
頑張って続きやってみます。