再投稿 エラー C4700 が出てしまいます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Hyoka
記事: 3
登録日時: 3年前

再投稿 エラー C4700 が出てしまいます

#1

投稿記事 by Hyoka » 3年前

現在、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;
       ・・・・・・

}
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 再投稿 エラー C4700 が出てしまいます

#2

投稿記事 by みけCAT » 3年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
Hyoka さんが書きました:
3年前
どのようにすれば、エラーがでずにこのよう形で実行できるのでしょうか?
ThreadFunc関数だけを見た時にgameの初期値がわからないため、
初期値によってはplayerが初期化されずに使用されることがある、というメッセージですね。
ループの前にplayerを適当な値で初期化するようにするといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 再投稿 エラー C4700 が出てしまいます

#3

投稿記事 by あたっしゅ » 3年前

コード:

#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;
    ・・・・・・

    }
}
変数 player は、case TITLE の中で初期化している、とおっしゃられるかもしれませんが、
コンパイラには、変数 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, 電子ブロック 持ち。

Hyoka
記事: 3
登録日時: 3年前

Re: 再投稿 エラー C4700 が出てしまいます

#4

投稿記事 by Hyoka » 3年前

みけCATさん
返信ありがとうございます。
次投稿する際に参考にさせてもらいます。

gameの初期値はTITLEにしてあります。

頂いた意見参考にさせてもらいます。

Hyoka
記事: 3
登録日時: 3年前

Re: 再投稿 エラー C4700 が出てしまいます

#5

投稿記事 by Hyoka » 3年前

あたっしゅさん
返信ありがとうございます。
コードを見やすくして頂きありがとうございます。

頂いた意見参考にさせてもらいます。

返信

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