現在、visual studio2019でシューティングをつくっているのですが、下のプログラムでは
エラー C4700 初期化されていないローカル変数’player’が使用されます
と出てしまいます。
どのようにすれば、エラーがでずにこのよう形で実行できるのでしょうか?
このプログラムは情報として必要だと思うところを記述し
他は( ・・・ )を使って省略を表しています
#include <Windows.h>
//キャラクター
struct CHARA
{
int x,y;//表示座標
int cntx, cnty; //フラグ
bool flg; //フラグ
};
enum GAME
{
TITLE, //0:タイトル画面
PLAY, //1:ゲーム中
OVER, //2:ゲームオーバー
CLEAR //3:ゲームクリア
};
//スレッド関数
DWORD WINAPI ThreadFunc(LPVOID vdParam)
{
//変数宣言のコピー先
GameWindow* gameWnd; //ゲームウィンドウ構造体
DWORD frame = 0; //フレーム数
DWORD beforeTime; //前の時間
・・・・・
CHARA player; //プレイヤー
・・・・・
//渡された値(ゲームウィンドウ構造体)を取得
gameWnd = (GameWindow*)vdParam;
//メモリDCの作成
hMemDC = CreateCompatibleDC(NULL); //Compatible 互換性
//時間の取得
beforeTime = timeGetTime();
while (1)
{
switch (game)
{
case TITLE: //タイトル画面
if (GetAsyncKeyState(VK_LBUTTON) & 0x1)
{
game = PLAY; //ゲーム中へ
//=== 初期化 ==//
//プレイヤー
player.x = WND_W / 5;
player.y = WND_H / 2;
player.flg = false;
player.cntx = 0;
player.cnty = 0;
}
break;
case PLAY: //ゲーム中
if (GetAsyncKeyState('W') & 0x8000)
{
player.y -= 5; <---エラーの出る位置
}
if (GetAsyncKeyState('S') & 0x8000)
{
player.y += 5;
}
if (GetAsyncKeyState('D') & 0x8000)
{
player.x += 5;
}
if (GetAsyncKeyState('A') & 0x8000)
{
player.x -= 5;
}
・・・・・・
break;
・・・・・・
}
}
再投稿 エラー C4700 が出てしまいます
Re: 再投稿 エラー C4700 が出てしまいます
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
初期値によってはplayerが初期化されずに使用されることがある、というメッセージですね。
ループの前にplayerを適当な値で初期化するようにするといいでしょう。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
ThreadFunc関数だけを見た時にgameの初期値がわからないため、
初期値によってはplayerが初期化されずに使用されることがある、というメッセージですね。
ループの前にplayerを適当な値で初期化するようにするといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 再投稿 エラー C4700 が出てしまいます
#include <Windows.h>
//キャラクター
struct CHARA
{
int x,y;//表示座標
int cntx, cnty; //フラグ
bool flg; //フラグ
};
enum GAME
{
TITLE, //0:タイトル画面
PLAY, //1:ゲーム中
OVER, //2:ゲームオーバー
CLEAR //3:ゲームクリア
};
//スレッド関数
DWORD WINAPI ThreadFunc(LPVOID vdParam)
{
//変数宣言のコピー先
GameWindow* gameWnd; //ゲームウィンドウ構造体
DWORD frame = 0; //フレーム数
DWORD beforeTime; //前の時間
・・・・・
CHARA player; //プレイヤー
・・・・・
//渡された値(ゲームウィンドウ構造体)を取得
gameWnd = (GameWindow*)vdParam;
//メモリDCの作成
hMemDC = CreateCompatibleDC(NULL); //Compatible 互換性
//時間の取得
beforeTime = timeGetTime();
while (1)
{
switch (game)
{
case TITLE: //タイトル画面
if (GetAsyncKeyState(VK_LBUTTON) & 0x1)
{
game = PLAY; //ゲーム中へ
//=== 初期化 ==//
//プレイヤー
player.x = WND_W / 5;
player.y = WND_H / 2;
player.flg = false;
player.cntx = 0;
player.cnty = 0;
}
break;
case PLAY: //ゲーム中
if (GetAsyncKeyState('W') & 0x8000)
{
player.y -= 5; <---エラーの出る位置
}
if (GetAsyncKeyState('S') & 0x8000)
{
player.y += 5;
}
if (GetAsyncKeyState('D') & 0x8000)
{
player.x += 5;
}
if (GetAsyncKeyState('A') & 0x8000)
{
player.x -= 5;
}
・・・・・・
break;
・・・・・・
}
}
コンパイラには、変数 game が TITLE になってから、PLAY になる、ということがわからないです。
CHARA player; を宣言した直後で、一旦、仮の初期化をしてください。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: 再投稿 エラー C4700 が出てしまいます
みけCATさん
返信ありがとうございます。
次投稿する際に参考にさせてもらいます。
gameの初期値はTITLEにしてあります。
頂いた意見参考にさせてもらいます。
返信ありがとうございます。
次投稿する際に参考にさせてもらいます。
gameの初期値はTITLEにしてあります。
頂いた意見参考にさせてもらいます。
Re: 再投稿 エラー C4700 が出てしまいます
あたっしゅさん
返信ありがとうございます。
コードを見やすくして頂きありがとうございます。
頂いた意見参考にさせてもらいます。
返信ありがとうございます。
コードを見やすくして頂きありがとうございます。
頂いた意見参考にさせてもらいます。