初歩的な質問ですが以下のエラーの修正方法を教えてください。

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

初歩的な質問ですが以下のエラーの修正方法を教えてください。

#1

投稿記事 by syrk » 10年前

下記のソースをVisualExpress2012でコンパイルすると、C++はintを既定値としてサポートしていません。と出ます。
extern宣言の不備が原因と思いますが、どのように修正すればよいのでしょうか。
ソースはソフト屋さんのRPG講座の利用になります、よろしくお願いします.

WinMain.cpp

コード:

#include "DxLib.h"
#include "WinMain.h"

#include "Common.h"
#include "Keyboard.h"
#include "GameMain.h"

GameState_t GameState;

//---------------------------------------------------------------------------------------------------------
// WinMain関数
//---------------------------------------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	//-----------------------------------------------------------------------------------------------------
	// 初期化
	//-----------------------------------------------------------------------------------------------------
	// ウィンドウモード
	ChangeWindowMode( TRUE );
	// タイトル
	SetMainWindowText( GAME_TITLE_STR );
	// 画面の解像度の設定
	SetGraphMode( SCREEN_X, SCREEN_Y, 32 );
	// DXライブラリの初期化を裏画面に設定
	if( DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK)!=0 ) return -1;
	// ゲームの各種値を初期化

	GameState = GAME_STATE_TITLE;

	//-----------------------------------------------------------------------------------------------------
	// メインループ
	//-----------------------------------------------------------------------------------------------------
	while(ProcessMessage()==0 && ClearDrawScreen()==0 )
	{

		Keyboard_Update();
		
		switch( GameState )
		{
		case GAME_STATE_TITLE:
			DrawString( 0, 0, "タイトル z -> LOAD", WHITE );
			if( KeyBuf( KEY_INPUT_Z ) == 1 ) GameState = GAME_STATE_LOAD;
			break;

		case GAME_STATE_LOAD:
			DrawString( 0, 0, "ロード画面 x - > ", WHITE );
			if( KeyBuf( KEY_INPUT_X ) == 1 ) GameState = GAME_STATE_TITLE;
			break;

		case GAME_STATE_MAIN:
			GameState = GameMain();
			break;
		}





		ScreenFlip();
	}

	DxLib_End();

	return 0;
}
WinMain.h

コード:

#pragma once

//---------------------------------------------------------------------------------------------------------
// 定数
//---------------------------------------------------------------------------------------------------------

// ウィンドウタイトルの定義
#define GAME_TITLE_STR   "SyrkのRPG"

// 画面サイズの定義
#define SCREEN_X   640
#define SCREEN_Y   480

// ゲーム全体の状態遷移
typedef enum GameState_t{
	GAME_STATE_TITLE,
	GAME_STATE_LOAD,
	GAME_STATE_MAIN,
	GAME_STATE_GAMEOVER,
	GAME_STATE_ENDING
};

extern GameState_t GameState;

GameMain.cpp

コード:

#include "DxLib.h"
#include "GameMain.h"
#include "Keyboard.h"
#include "WinMain.h"
#include "Common.h"


GameState_t GameMain()
{
	DrawString( 0, 0, "ゲーム本編", WHITE );
	if( KeyBuf( KEY_INPUT_Y ) != 0 ) return GAME_STATE_TITLE;

	return GAME_STATE_LOAD;
}
GameMain.h

コード:

#pragma once

extern GameState_t GameMain();

初級者
記事: 200
登録日時: 13年前

Re: 初歩的な質問ですが以下のエラーの修正方法を教えてください。

#2

投稿記事 by 初級者 » 10年前

どのソースコードの何行目で
そのエラーが出るかを
付け加えてくださると、
早く解決するかもしれません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 初歩的な質問ですが以下のエラーの修正方法を教えてください。

#3

投稿記事 by softya(ソフト屋) » 10年前

並び順からすると、GameMain.hで参照しているGameState_tが
#include "DxLib.h"
#include "GameMain.h"
#include "Keyboard.h"
#include "WinMain.h"
#include "Common.h"
の並びだとWinMain.hの方が後で出てくるのでエラーなのでは?とエスパー的に推測してみました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: 初歩的な質問ですが以下のエラーの修正方法を教えてください。

#4

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

関係あるかはわかりませんが、WinMain.hの15行目、enumの前のtypedefは余計だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

syrk
記事: 4
登録日時: 10年前

Re: 初歩的な質問ですが以下のエラーの修正方法を教えてください。

#5

投稿記事 by syrk » 10年前

>> softyaさん

ヘッダーファイルの入れ替え( WinMain.hを先頭)を行ったところ無事に解決しました!
ヘッダーファイルの読み込みの順番も気にする必要があるとは初めて知りました!
ありがとうございました、また、講座の方お世話になります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 初歩的な質問ですが以下のエラーの修正方法を教えてください。

#6

投稿記事 by softya(ソフト屋) » 10年前

エラーは明確に示してもらうと、こちらも答えやすいので次回は詳しくお願いします。

どうやってもヘッダ依存してしまう場合ですが、
GameMain.h

コード:

#pragma once
#include "WinMain.h"
extern GameState_t GameMain();
とすると良いかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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