シューティングゲームサンプルの事で
シューティングゲームサンプルの事で
初めまして、かりなんと言います。
プログラムに関してはほぼ初心者な為、紹介されているサンプルを
順次見ながらまずはどうなっていくかを見ていこうと思い
やっていたのですが・・・
12. 敵の概念と表示。
と言う所の全てを入れて実行使用とした際に
/* initial.cpp */
の場所にて
C:\Documents and Settings\Administrator\デスクトップ\実行用フォルダ\initial.cpp(15) : error C2374: 'i' : 再定義されています。2 回以上初期化されています。
C:\Documents and Settings\Administrator\デスクトップ\実行用フォルダ\initial.cpp(12) : 'i' の宣言を確認してください。
cl.exe の実行エラー
と言うエラーが出てしまいどうすればいいのか分からず困っています。
この場合はどうしたらいいのでしょうか・・・?
起動環境はC++6.0です。
プログラムに関してはほぼ初心者な為、紹介されているサンプルを
順次見ながらまずはどうなっていくかを見ていこうと思い
やっていたのですが・・・
12. 敵の概念と表示。
と言う所の全てを入れて実行使用とした際に
/* initial.cpp */
の場所にて
C:\Documents and Settings\Administrator\デスクトップ\実行用フォルダ\initial.cpp(15) : error C2374: 'i' : 再定義されています。2 回以上初期化されています。
C:\Documents and Settings\Administrator\デスクトップ\実行用フォルダ\initial.cpp(12) : 'i' の宣言を確認してください。
cl.exe の実行エラー
と言うエラーが出てしまいどうすればいいのか分からず困っています。
この場合はどうしたらいいのでしょうか・・・?
起動環境はC++6.0です。
Re:シューティングゲームサンプルの事で
こんにちは、かなりんさん、初めまして。
エラーの通り、2回以上定義されているのではないでしょうか?
サンプルをそのままコピーされました?
最初にint i=0;とか書いていませんか?
for文の中でiは宣言されていうので、別に宣言をする必要がありません。
もしも自分で改良したものではなくコピーしただけなのに問題があるということでしたら
どこか私の書いたプログラムに問題画あるということなので教えてください。
エラーの通り、2回以上定義されているのではないでしょうか?
サンプルをそのままコピーされました?
最初にint i=0;とか書いていませんか?
for文の中でiは宣言されていうので、別に宣言をする必要がありません。
もしも自分で改良したものではなくコピーしただけなのに問題があるということでしたら
どこか私の書いたプログラムに問題画あるということなので教えてください。
Re:シューティングゲームサンプルの事で
返信ありがとうございます。
こちらの別ページにありましたDxLibにページの通りに追加していった
だけのはずなのですが・・・(コピーペースト)
for(int i=0;i<PLAYER_MAX_SHOT1;i++)
for(int j=0;j<PLAYER_MAX_SHOT2;j++)
PlayerShot[j].flag=0;
→ for(int i=0;i<ENEMY_TOTAL_NUM;i++)
enemy.flag=0;
上記のようにinitialをペーストした際実行するとエラーが出ました。
→(やじるし)の部分に再定義と出ます。
initialを変えるまではエラーが出てないのでここでどうなっているかがよく分かりません・・・
こちらの別ページにありましたDxLibにページの通りに追加していった
だけのはずなのですが・・・(コピーペースト)
for(int i=0;i<PLAYER_MAX_SHOT1;i++)
for(int j=0;j<PLAYER_MAX_SHOT2;j++)
PlayerShot[j].flag=0;
→ for(int i=0;i<ENEMY_TOTAL_NUM;i++)
enemy.flag=0;
上記のようにinitialをペーストした際実行するとエラーが出ました。
→(やじるし)の部分に再定義と出ます。
initialを変えるまではエラーが出てないのでここでどうなっているかがよく分かりません・・・
Re:シューティングゲームサンプルの事で
調べてみたところ
VC++6.0の特徴として
現象:for ループ内における変数定義のスコープは、ループの内部だけのローカルなものであるべきなのに、そうでなく一つ外側のブロックでローカルになっている。
int main()
{
for(int i = 0; i < 5; ++i)
;
for(int i = 0; i < 5; ++i) // C2374: 'i': 再定義されています。2 回以上初期化されています。
;
return 0;
}
回避手段: 問題となる for ループをもう一つの別の一組の中括弧で囲う.
という記事を見つけました。
for文をかっこで囲んでみてください。
VC++6.0の特徴として
現象:for ループ内における変数定義のスコープは、ループの内部だけのローカルなものであるべきなのに、そうでなく一つ外側のブロックでローカルになっている。
int main()
{
for(int i = 0; i < 5; ++i)
;
for(int i = 0; i < 5; ++i) // C2374: 'i': 再定義されています。2 回以上初期化されています。
;
return 0;
}
回避手段: 問題となる for ループをもう一つの別の一組の中括弧で囲う.
という記事を見つけました。
for文をかっこで囲んでみてください。
Re:シューティングゲームサンプルの事で
/* initial.cpp */ #include "DxLib.h" #include "ExternGV.h" void initialization(){ Player.x=200.0; Player.y=400.0; Player.counter=0; Player.status=0; for(int i=0;i<PLAYER_MAX_SHOT1;i++){ for(int j=0;j<PLAYER_MAX_SHOT2;j++){ PlayerShot[j].flag=0; } } for(int i=0;i<ENEMY_TOTAL_NUM;i++){ enemy.flag=0; } } void SetColor(){ color_white = GetColor(255,255,255); //白色ハンドルを取得 }
これで試してみてください。
Re:シューティングゲームサンプルの事で
/* initial.cpp */ #include "DxLib.h" #include "ExternGV.h" void initialization(){ int i,j; Player.x=200.0; Player.y=400.0; Player.counter=0; Player.status=0; for(i=0;i<PLAYER_MAX_SHOT1;i++){ for(j=0;j<PLAYER_MAX_SHOT2;j++){ PlayerShot[j].flag=0; } } for(i=0;i<ENEMY_TOTAL_NUM;i++){ enemy.flag=0; } } void SetColor(){ color_white = GetColor(255,255,255); //白色ハンドルを取得 }
こちらでもいけると思います。
Re:シューティングゲームサンプルの事で
本当にありがとうございました。
for(int i=0;i<PLAYER_MAX_SHOT1;i++)
for(int j=0;j<PLAYER_MAX_SHOT2;j++)
PlayerShot[j].flag=0;
{
for(int i=0;i<ENEMY_TOTAL_NUM;i++)
enemy.flag=0;
}
としたら動きました。
また何処かでつまったら質問するかと思いますが
よろしくお願いします。
for(int i=0;i<PLAYER_MAX_SHOT1;i++)
for(int j=0;j<PLAYER_MAX_SHOT2;j++)
PlayerShot[j].flag=0;
{
for(int i=0;i<ENEMY_TOTAL_NUM;i++)
enemy.flag=0;
}
としたら動きました。
また何処かでつまったら質問するかと思いますが
よろしくお願いします。
Re:シューティングゲームサンプルの事で
http://tmz.skr.jp/messages/msg0208.html
こちらの8/19に全く同じような記述があります。
VC++コンパイラの不具合ではないかと思います。
for文の中で宣言されているものは、関数の最初に宣言してみてください。
こちらの8/19に全く同じような記述があります。
VC++コンパイラの不具合ではないかと思います。
for文の中で宣言されているものは、関数の最初に宣言してみてください。
Re:シューティングゲームサンプルの事で
http://www.google.co.jp/search?hl=ja&q= ... %B4%A2&lr=
この辺で記事を見つけました。
サンプルと言うほどの物ではないですよ^^;
ご覧頂ありがとうございます☆
ゲーム作成頑張ってください^^
この辺で記事を見つけました。
サンプルと言うほどの物ではないですよ^^;
ご覧頂ありがとうございます☆
ゲーム作成頑張ってください^^
Re:シューティングゲームサンプルの事で
このfor文で宣言した変数の寿命については
VC6の不具合ではなく、VC6が出た当時のC++の仕様だそうです。
VC6が出た当初はこれが当たり前として使われていたため
SPで修正してしまうと、互換性がなくなってしまうので
SP6が発行されている今でも、この現象がVC6では起こるようです。
VC6の不具合ではなく、VC6が出た当時のC++の仕様だそうです。
VC6が出た当初はこれが当たり前として使われていたため
SPで修正してしまうと、互換性がなくなってしまうので
SP6が発行されている今でも、この現象がVC6では起こるようです。
Re:シューティングゲームサンプルの事で
なるほど、そうだったんですか、ではサンプルを修正しないといけませんね><
しかし何故私の方ではコンパイル時に警告すら出ないのでしょう・・。
しかし何故私の方ではコンパイル時に警告すら出ないのでしょう・・。
Re:シューティングゲームサンプルの事で
>しかし何故私の方ではコンパイル時に警告すら出ないのでしょう
今の C++の仕様には合っているからじゃないでしょうか。
サンプルを直すのであれば、コンパイラを見分けて、
例えば MSVC6.0だったら
#define for if(0);else for
で回避するとかしてみると、見た目が変わらなくていいと思います。
(あまりお行儀はよくないんですけどね)
今の C++の仕様には合っているからじゃないでしょうか。
サンプルを直すのであれば、コンパイラを見分けて、
例えば MSVC6.0だったら
#define for if(0);else for
で回避するとかしてみると、見た目が変わらなくていいと思います。
(あまりお行儀はよくないんですけどね)
Re:シューティングゲームサンプルの事で
>#define for if(0);else for
おぉ、そんなワザが!さすがJustyさんは解決の方法がフタ味位違いますね。面白いです。
一応間違いの構文を書いたままだとそれを他にコピーした時などでエラーが出たりということにつながるかもしれませんので、カッコを使って直そうと思います。
ありがとうございます。
おぉ、そんなワザが!さすがJustyさんは解決の方法がフタ味位違いますね。面白いです。
一応間違いの構文を書いたままだとそれを他にコピーした時などでエラーが出たりということにつながるかもしれませんので、カッコを使って直そうと思います。
ありがとうございます。
Re:シューティングゲームサンプルの事で
そういえば、こちらの講座って C++準拠で書かれているんですね。
気付きませんでした・・・。
って、さらに最近気付いたんですか、DxLibも製作元のHPでは
C言語用と書いてあったんですが、実はC言語用じゃなくてC++用だったんですよね。
こないだ、DxLibをちょっと試してみようかな、と思って
C言語でプロジェクト作ったらビルドが通らなくて・・・。
気付きませんでした・・・。
って、さらに最近気付いたんですか、DxLibも製作元のHPでは
C言語用と書いてあったんですが、実はC言語用じゃなくてC++用だったんですよね。
こないだ、DxLibをちょっと試してみようかな、と思って
C言語でプロジェクト作ったらビルドが通らなくて・・・。
Re:シューティングゲームサンプルの事で
全然オブジェクト指向じゃないんですけど、ちらほらC++環境でないとコンパイル通らない部分があって一環性がないですね^^;
CxLibはC++だったんですかぁ、リファレンスページを見る限りではCかと思ってました。
CxLibはC++だったんですかぁ、リファレンスページを見る限りではCかと思ってました。
Re:シューティングゲームサンプルの事で
>CxLibはC++だったんですかぁ、リファレンスページを見る限りではCかと思ってました
そう思っていたんですけどね・・・。
インターフェースこそ一見C言語に見えるんですが、"DxDirectX.h"では
classの宣言とかありますし、"DxLib.h"ではデフォルト引数とか使われていて、
C言語だとダメみたいです。
そう思っていたんですけどね・・・。
インターフェースこそ一見C言語に見えるんですが、"DxDirectX.h"では
classの宣言とかありますし、"DxLib.h"ではデフォルト引数とか使われていて、
C言語だとダメみたいです。