エフェクトについて

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

エフェクトについて

#1

投稿記事 by げん » 11年前

19章の敵消滅エフェクトで詰まっています

ビルドをしたらエラーが沢山出てきて困っております

out.cpp
(14): error C2065: 'cshot' : 定義されていない識別子です。
(14): error C2228: '.cnt' の左側はクラス、構造体、共用体でなければなりません

↑のようなエラー文が何行も出てきたのですが何をどうすれば良いのでしょうか?

out.cpp やini.cpp等が出ていたらそのソースファイルが間違っていて、(14): errorの()の数字はそのエラーの原因がある行数だと思うのですが
プログラム知識は〈やさしいC++〉一通り読んだ程度でしかもエラー数が多すぎて何をすれば良いのか分からない状況です

box
記事: 2002
登録日時: 13年前

Re: エフェクトについて

#2

投稿記事 by box » 11年前

げん さんが書きました: out.cpp
(14): error C2065: 'cshot' : 定義されていない識別子です。
(14): error C2228: '.cnt' の左側はクラス、構造体、共用体でなければなりません

↑のようなエラー文が何行も出てきたのですが何をどうすれば良いのでしょうか?
とりあえず、out.cpp の中身が見たいです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

zxc
記事: 79
登録日時: 11年前
住所: 日本の背骨(?)あたり

Re: エフェクトについて

#3

投稿記事 by zxc » 11年前

  19章で詰まっていると言われても、そちらがコピー&ペーストした結果エラーが出たのか、
参考にして自力でコードを書いた結果エラーが出たのか、誰も分からないので答えようが無いと思います。

  問題ありそうなコードとエラー文を載せてもらってもいいでしょうか。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: エフェクトについて

#4

投稿記事 by Dixq (管理人) » 11年前

cshotが定義されていないか、使用している位置から見えないのでしょう。
配布しているプロジェクトの19章とどこが違うのでしょうか?

げん

Re: エフェクトについて

#5

投稿記事 by げん » 11年前

問題だと思われるコードファイルの一つであるout.cppの中身です

コード:

 #include "../include/GV.h"

#define ENEMY_RANGE_MAX 4
#define CSHOT_RANGE_MAX 2

//敵の当たり判定範囲
int enemy_range[ENEMY_RANGE_MAX]={16,30,16,50};
//自機ショットの当たり判定範囲
int cshot_range[CSHOT_RANGE_MAX]={6,};

//当たったかどうかを判定する
int out_judge_cshot(int i,int s){
        int j;
        if(cshot[i].cnt>0){//ショットの軌道が1度でも計算されていたら
                double x=cshot[i].x-enemy[s].x;//敵と自機ショットとの距離
                double y=cshot[i].y-enemy[s].y;
                //オーバーフロー対策
                if(cshot[i].knd>=CSHOT_RANGE_MAX || enemy[s].knd>=ENEMY_RANGE_MAX)
                        printfDx("out_judge_cshot内オーバーフロー");
                //敵の当たり判定と自機ショットの当たり判定の合計範囲
                double r=cshot_range[cshot[i].knd]+enemy_range[enemy[s].knd];
                //中間を計算する必要があれば
                if(cshot[i].spd>r){
                        //1フレーム前にいた位置を格納する
                        double pre_x=cshot[i].x+cos(cshot[i].angle+PI)*cshot[i].spd;
                        double pre_y=cshot[i].y+sin(cshot[i].angle+PI)*cshot[i].spd;
                        double px,py;
                        for(j=0;j<cshot[i].spd/r;j++){//進んだ分÷当たり判定分ループ
                                px=pre_x-enemy[s].x;
                                py=pre_y-enemy[s].y;
                                if(px*px+py*py<r*r)
                                        return 1;
                                pre_x+=cos(cshot[i].angle)*r;
                                pre_y+=sin(cshot[i].angle)*r;
                        }
                }
                if(x*x+y*y<r*r)//当たり判定内なら
                        return 1;//当たり
        }
        return 0;
}

//敵が死ぬかどうかの決定

extern void enter_del_effect(int);

void enemy_death_judge(int s){
        int i;
        se_flag[8]=1;//敵に当たった音
        if(enemy[s].hp<0){//敵のHPが0未満になったら
                enemy[s].flag=0;//敵を消滅させる
                se_flag[1]=1;//敵のピチュり音
                enter_del_effect(s);
                for(i=0;i<SHOT_MAX;i++){//敵総数分
                        if(shot[i].flag!=0){//登録されている弾幕データがあれば
                                if(s==shot[i].num){//その敵が登録した弾幕があれば
                                        shot[i].flag=2;//それ以上弾幕を続けないフラグを立てる
                                        break;
                                }
                        }
                }
        }
}

//当たり判定メイン
void out_main(){
        int i,s;
        for(i=0;i<CSHOT_MAX;i++){//自機ショット総数
                if(cshot[i].flag>0){
                        for(s=0;s<ENEMY_MAX;s++){//敵総数
                                if(enemy[s].flag>0){
                                        if(out_judge_cshot(i,s)){//自機ショットと敵が当たっていれば
                                                cshot[i].flag=0;//その自機ショットを消す
                                                enemy[s].hp-=cshot[i].power;//弾の持つパワー分HPを減らす
                                                enemy_death_judge(s);//敵が死ぬかどうかを決める
                                        }
                                }
                        }
                }
        }
} 
プログラムは19章のコピペです

zxc
記事: 79
登録日時: 11年前
住所: 日本の背骨(?)あたり

Re: エフェクトについて

#6

投稿記事 by zxc » 11年前

  おそらく自機弾の構造体cshotが見つからないのだと思います。
「自機にショットを撃たせてみよう」ページ内にある

コード:

//キャラクターショットに関する構造体
typedef struct{
        int flag,power,cnt,knd;//フラグ、パワー、カウンタ、種類
        double x,y,angle,spd;//座標、角度、スピード
}cshot_t;

//---- GV.h に以下を追加 ----

GLOBAL cshot_t cshot[CSHOT_MAX];//自機ショット登録用変数
この処理のどちらかがされていないのではないですか。
最初から19章まで全部コピーなら多分この辺りかと思います。

げん

Re: エフェクトについて

#7

投稿記事 by げん » 11年前

zxcさんの言うとおりにしたらエラーは消えたのですが

c1xx : fatal error C1083: ソース ファイルを開けません。'effect.cpp': No such file or directory

が出たのですがenemyにあるhit_effectの場所が悪いのでしょうか?試しに一回effectのフォルダに移動したのですが変わらなかったので
同じエラーが出ている人たちの質問を見て試しているのですがエラーが消えてくれません

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: エフェクトについて

#8

投稿記事 by へにっくす » 11年前

げん さんが書きました:zxcさんの言うとおりにしたらエラーは消えたのですが

c1xx : fatal error C1083: ソース ファイルを開けません。'effect.cpp': No such file or directory

が出たのですがenemyにあるhit_effectの場所が悪いのでしょうか?試しに一回effectのフォルダに移動したのですが変わらなかったので
同じエラーが出ている人たちの質問を見て試しているのですがエラーが消えてくれません
関数云々でなく、effect.cppというファイルがないよ、と言ってるだけですよ?
ファイルはどこに存在していますか?
written by へにっくす

げん

Re: エフェクトについて

#9

投稿記事 by げん » 11年前

effect.cppは龍神録のフォルダにあります。厳密に行ったら1章と2章の間に挟まれていますね


このeffect.cppフォルダを別の場所に移動させれば良いのでしょうか?

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: エフェクトについて

#10

投稿記事 by へにっくす » 11年前

げん さんが書きました:effect.cppは龍神録のフォルダにあります。厳密に行ったら1章と2章の間に挟まれていますね
このeffect.cppフォルダを別の場所に移動させれば良いのでしょうか?
19章で悩んでたんじゃないの?
なんですか1章と2章の間って
out.cppと同じフォルダにあるかを聞いていたんですが、そんな答えじゃ分かりませんよ。
written by へにっくす

zxc
記事: 79
登録日時: 11年前
住所: 日本の背骨(?)あたり

Re: エフェクトについて

#11

投稿記事 by zxc » 11年前

げん さんが書きました:   effect.cppは龍神録のフォルダにあります。
厳密に行ったら1章と2章の間に挟まれていますね
このeffect.cppフォルダを別の場所に移動させれば良いのでしょうか?
  この説明からそちらがどのような状況なのか、分かることはほとんどありません。
龍神録のフォルダと言っても、そちらの自作かダウンロードしたものか分かりませんし、
1章と2章と言われてもフォルダかファイルかで解決策は多少異なるでしょう。
具体的にどのような階層構造をとっているのかを説明してくださいね。

  自分があまり見ないエラーですので良く分かりませんが、「effect.cpp」が
そもそも存在していないのか、もしくは適切な場所に存在していないのだと思います。

閉鎖

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