C++でゲーム開発をしています。エラーが直せません。原因と対処法を教えてください。

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

C++でゲーム開発をしています。エラーが直せません。原因と対処法を教えてください。

#1

投稿記事 by rock_s6nmnl » 9年前

LNK1120 1 件の未解決の外部参照
LNK2001 外部シンボル ""int __cdecl IsAKeyTrigger(int)" (?IsAKeyTrigger@@YAHH@Z)" は未解決です。
LNK2019 未解決の外部シンボル "int __cdecl IsAKeyTrigger(int)" (?IsAKeyTrigger@@YAHH@Z) が関数 "void __cdecl GameMain(void)" (?GameMain@@YAXXZ) で参照されました。
とエラーが出ます。


コード:

 main.cpp 
#include "DxLib.h"
#include "gamemain.h"
#include "main.h"

//グローバル変数
//時間計測用変数
int g_lasttime = 0;										//直前の計測時間
float g_frametime = 0;									//1ループにかかった時間
int g_timerstart;										//タイマー用変数

GameState g_gamestate = GAME_TITLE;						

int g_gametitleimg;										//タイトルイメージ
int g_heroimg;											//画像
float g_hx = 0, g_hy = 0;								//座標
BOOL g_akey_prev;										//直前のAボタンの状態
int g_middlefont;										//中サイズフォントハンドル
int g_largefont;										//大サイズフォントハンドル

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	ChangeWindowMode(TRUE);								//ウィンドウモードにする
	SetGraphMode(800, 600, 32);							//ウィンドウサイズを変更する

	if (DxLib_Init() == -1) return -1;					// DXライブラリ初期化

	//画像の読み込み
	g_gametitleimg = LoadGraph("media\\smp1_title.png");
	g_heroimg = LoadGraph("media\\smp1_chara01.png");
	g_middlefont = CreateFontToHandle("メイリオ", 42, -1, DX_FONTTYPE_ANTIALIASING);
	g_largefont = CreateFontToHandle("メイリオ", 90, -1, DX_FONTTYPE_ANTIALIASING);

	SetDrawScreen(DX_SCREEN_BACK);						//ウラ画面を描画対象にする
	g_lasttime = GetNowCount() & INT_MAX;				//現在時刻の記録
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {

		//1ループにかかった時間を計測
		int curtime = GetNowCount();
		g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
		g_lasttime = curtime;

		ClearDrawScreen();								//画面消去

		//画面描画関数に切り替え
		switch (g_gamestate)
		{
		case GAME_TITLE:
			DrawGameTitle();
			break;
		case GAME_MAIN:
			DrawGameMain();
			break;
		case GAME_CLEAR:
			DrawGameClear();
			break;
		case GAME_OVER:
			DrawGameOver();
			break;
		default:
			break;
		}
		ScreenFlip();
	}

	WaitKey();											//待機

	DxLib_End();										// DXライブラリ使用の終了処理
	return 0;											// ソフトの終了 
}

//タイトル画面描画
void DrawGameTitle() {
	DrawBox(0, 0, 800, 600, GetColor(255, 255, 255), TRUE);
	DrawGraph(0, 0, g_gametitleimg, TRUE);

	//テキスト表示
	DrawStringToHandle(100, 400, "Zキーでゲームスタート", GetColor(255, 0, 255), g_middlefont);
	DrawStringToHandle(100, 460, "カーソルキーで上下左右に移動", GetColor(0, 0, 0), g_middlefont);

	//キーをチェックして画面を切り替え
	int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
	if (IsAKeyTrigger(key) == TRUE) g_gamestate = GAME_MAIN;
}

//ゲーム本編描画
void DrawGameMain(){
		GameMain();
	}

//ゲームクリア画面描画
void DrawGameClear() {

}

//ゲームオーバー画面描画
void DrawGameOver() {
	//テキスト表示
	DrawStringToHandle(100, 200, "ゲームオーバー", GetColor(255, 0, 0), g_largefont);

	//5秒経ったらタイトル画面へ
	if (g_lasttime - g_timerstart > 5000) g_gamestate = GAME_TITLE;
}



コード:

 main.h
#ifndef __MAIN_H__
#define __MAIN_H__

#include <DxLib.h>
#include "gamemain.h"

//グローバル変数
//時間計測用変数
extern int g_lasttime;			//直前の計測時間
extern float g_frametime;		//1ループにかかった時間
extern int g_timerstart;			//タイマー用変数

enum GameState
	{GAME_TITLE, GAME_MAIN, GAME_CLEAR, GAME_OVER};

extern GameState g_gamestate;
extern int g_gametitleimg;			//タイトルイメージ
extern int g_heroimg;				//画像
extern float g_hx, g_hy;			//座標
extern BOOL g_akey_prev;			//直前のAボタンの状態
extern int g_middlefont;			//中サイズフォントハンドル
extern int g_largefont;				//大サイズフォントハンドル

//関数プロトタイプ宣言
void DrawGameTitle();
void DrawGameMain();
void DrawGameClear();
void DrawGameOver();
BOOL IsAKeyTrigger(int key);

#endif



コード:

 gamemain.cpp 
#include "gamemain.h"
#include "main.h"

void GameMain() {
	//自キャラ移動
	int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
	float mv = 80.0f * g_frametime;					//移動量計算
	if (key & PAD_INPUT_UP)		g_hy -= mv;
	if (key & PAD_INPUT_DOWN)	g_hy += mv;
	if (key & PAD_INPUT_LEFT)	g_hx -= mv;
	if (key & PAD_INPUT_RIGHT)	g_hx += mv;
	DrawGraph(g_hx, g_hy, g_heroimg, TRUE);			//画像の表示

	//Zキーをチェックして画面を切り替え
	if (IsAKeyTrigger(key) == TRUE) {
		g_gamestate = GAME_OVER;
		g_timerstart = g_lasttime;					//タイマーセット
	}
}



コード:

 gamemain.h
#ifndef __GAMEMAIN_H__
#define __GAMEMAIN_H__

#include <DxLib.h>
#include "main.h"

void GameMain();

#endif

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

Re: C++でゲーム開発をしています。エラーが直せません。原因と対処法を教えてください。

#2

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

原因:関数IsAKeyTrigger(int key)が定義されていないか、定義を含むファイルがリンクされていない
対処法:関数IsAKeyTrigger(int key)を定義し、定義を含むファイルをリンクする
だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

いわん

Re: C++でゲーム開発をしています。エラーが直せません。原因と対処法を教えてください。

#3

投稿記事 by いわん » 9年前

プロトタイプ宣言が間違っている可能性もあります。
BOOL と bool の違いとか。

超初級者
記事: 56
登録日時: 10年前

Re: C++でゲーム開発をしています。エラーが直せません。原因と対処法を教えてください。

#4

投稿記事 by 超初級者 » 9年前

いわん さんが書きました:プロトタイプ宣言が間違っている可能性もあります。
BOOL と bool の違いとか。
もしそうだったら、コンパイルエラーになりゃせんかな?

いわん

Re: C++でゲーム開発をしています。エラーが直せません。原因と対処法を教えてください。

#5

投稿記事 by いわん » 9年前

BOOL と bool の違いでリンクエラーは経験あるもので。
インクルードファイルに正しいプロトタイプが書かれていればコンパイルエラー(再定義)になりますね。

閉鎖

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