C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: エラーが直せません。原因と対処法を教えてください。


(過去ログ 133 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■78674 / inTopicNo.1)  エラーが直せません。原因と対処法を教えてください。
  
□投稿者/ rock_s6nmnl (1回)-(2016/02/05(Fri) 22:40:54)

分類:[C/C++] 

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
引用返信 編集キー/
■78675 / inTopicNo.2)  Re[1]: エラーが直せません。原因と対処法を教えてください。
□投稿者/ Azulean (591回)-(2016/02/05(Fri) 23:03:01)
No78674 (rock_s6nmnl さん) に返信
> LNK1120 1 件の未解決の外部参照
> LNK2001 外部シンボル ""int __cdecl IsAKeyTrigger(int)" (?IsAKeyTrigger@@YAHH@Z)" は未解決です。
> LNK2019 未解決の外部シンボル "int __cdecl IsAKeyTrigger(int)" (?IsAKeyTrigger@@YAHH@Z) が関数 "void __cdecl GameMain(void)" (?GameMain@@YAXXZ) で参照されました。
> とエラーが出ます。

IsAKeyTrigger という関数をあなたが用意していないからです。
何か参考にされたのであれば、IsAKeyTrigger という関数の定義がどこかにあるはずですからそれも一緒に持ってくるべきでしょう。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -