13章について未定義の外部シンボルエラー
Posted: 2013年3月28日(木) 23:28
初めましての人は初めまして。イセミトです。
つい二日ほど前に構文エラーで質問させていただき、解決させていただきました。
が、その後に新たなエラーが発生し、Google先生の助けも借りてなんとか自力で解決しようとしたのですが挫折してしまいました。
【エラー内容1】
エラー 1 error LNK2019: 未解決の外部シンボル "int __cdecl DxLib::DrawRotaGraphF(double,double,double,double,int,int,int)" (?DrawRotaGraphF@DxLib@@YAHNNNNHHH@Z) が関数 "void __cdecl graph_ch(void)" (?graph_ch@@YAXXZ) で参照されました。 C:\Users\Public\Documents\仮置き場\project\1章\graph.obj RyuJin
【エラー内容2】
エラー 2 error LNK1120: 外部参照 1 が未解決です。 C:\Users\Public\Documents\仮置き場\project\1章\Debug\RyuJin.exe 1 1 RyuJin
Google先生によるとこれは「「graph_ch」という関数が定義されてねぇよ」って言われてるんだと解釈できますが、
ソースコードを見る限りちゃんと定義しているはずだし、そもそも定義されているのはDXライブラリのほうなので、
呼び出し方に問題があるのでは、と。
とりあえずここに問題があるのではと思われるソースコードを載せておきました。
この中になにか呼び出しで問題のある所はございますでしょうか?
私が探した限りではどこが問題なのか理解が及ばず、申し訳ないです。
因みに、試しに「graph_ch()」をコメントアウトしてみると、今度は「graph_enemy()」が定義されてねえよと怒られました。
何卒助言をよろしくお願いします。
つい二日ほど前に構文エラーで質問させていただき、解決させていただきました。
が、その後に新たなエラーが発生し、Google先生の助けも借りてなんとか自力で解決しようとしたのですが挫折してしまいました。
【エラー内容1】
エラー 1 error LNK2019: 未解決の外部シンボル "int __cdecl DxLib::DrawRotaGraphF(double,double,double,double,int,int,int)" (?DrawRotaGraphF@DxLib@@YAHNNNNHHH@Z) が関数 "void __cdecl graph_ch(void)" (?graph_ch@@YAXXZ) で参照されました。 C:\Users\Public\Documents\仮置き場\project\1章\graph.obj RyuJin
【エラー内容2】
エラー 2 error LNK1120: 外部参照 1 が未解決です。 C:\Users\Public\Documents\仮置き場\project\1章\Debug\RyuJin.exe 1 1 RyuJin
Google先生によるとこれは「「graph_ch」という関数が定義されてねぇよ」って言われてるんだと解釈できますが、
ソースコードを見る限りちゃんと定義しているはずだし、そもそも定義されているのはDXライブラリのほうなので、
呼び出し方に問題があるのでは、と。
//graph.cpp
#include "../include/GV.h"
//キャラクタの描画関数
void graph_ch()
{
DrawRotaGraphF(
ch.x+FIELD_X,
ch.y+FIELD_Y,
1.0f,
0.0f,
img_ch[0][ch.Image],
true
);
}
//敵の描画関数
void graph_enemy()
{
int i;
for(i = 0; i < ENEMY_MAX; i++)
{
if(Enemy[i].Flag == 1)
{
DrawRotaGraphF(Enemy[i].x+FIELD_X,Enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][Enemy[i].Image],true);
}
}
}
//背景枠の描画関数
void graph_board()
{
DrawGraph( 0, 0,img_board[10],false); //枠上
DrawGraph( 0, 16,img_board[11],false); //枠左
DrawGraph( 0,464,img_board[12],false); //枠下
DrawGraph(416, 0,img_board[20],false); //枠右
}
//弾の描画
void graph_bullet()
{
int i,j;
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
//敵の弾幕数分ループ
for(i=0;i<SHOT_MAX;i++)
{
//弾幕データがオンなら
if(Shot[i].Flag > 0)
{
//その弾幕が持つ弾の最大数分ループ
for(j = 0; j < SHOT_BULLET_MAX; j++)
{
//弾データがオンなら
if(Shot[i].Bullet[j].Flag != 0)
{
if(Shot[i].Bullet[j].Eff == 1)
{
//描画ブレンドモードをセットする
SetDrawBlendMode( DX_BLENDMODE_ADD, 255);
}
//弾の回転描画
DrawRotaGraphF(
Shot[i].Bullet[j].x + FIELD_X, Shot[i].Bullet[j].y + FIELD_Y, //敵弾の座標
1.0, Shot[i].Bullet[j].Angle + PI/2, //角度
Image_Bullet[Shot[i].Bullet[j].Kind][Shot[i].Bullet[j].Color],true //画像と回転有効の有無
);
if(Shot[i].Bullet[j].Eff == 1)
{
//描画ブレンドモードをセットする
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0);
}
}
}
}
}
SetDrawMode(DX_DRAWMODE_NEAREST);//描画形式を戻す
}
//描画関数の呼び出し
void graph_main()
{
graph_enemy();
graph_ch();
graph_bullet();
graph_board();
}
//function.h
//graph.cppからの呼び出し
//描画メイン
GLOBAL void graph_main();
//key.cppからの呼び出し
//現在のキー入力処理を行う
GLOBAL int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
GLOBAL int CheckStateKey(unsigned char Handle);
//パッドとキーボードの両方の入力をチェックする
GLOBAL void GetHitPadStateAll();
//されたパッドキー番号の入力状態を返す。返り値が-1なら不正
GLOBAL int CheckStatePad(unsigned int Handle);
//laod.cppからの呼び出し
//データのロード
GLOBAL void Load();
//ファイルのロード
GLOBAL void Load_Story();
//ini.cppからの呼び出し
//初期化
GLOBAL void First_Ini();
GLOBAL void Ini();
//char.cppからの呼び出し
//アニメーション計算
GLOBAL void Calc_ch();
//移動処理
GLOBAL void ch_Move();
//enemy.cppからの呼び出し
//敵情報
GLOBAL void Enemy_Main();
//shot.cppからの呼び出し
//n番目のショットを登録した敵と自機との角度を返す
GLOBAL double ShotAtan2(int n);
//空いている弾を探す
GLOBAL int Shot_Search(int n);
//「shot.cpp」内で定義した関数をまとめて呼び出す
GLOBAL void Shot_Main();
//music.cpp
//初期化
GLOBAL void Music_Ini();
//再生
GLOBAL void Music_Play();
//main.cpp
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//メインループ関数
int ProcessLoop()
{
//プロセス処理がエラーなら-1を返す
if(ProcessMessage()!=0)
{
return -1;
}
//画面クリア処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)
{
return -1;
}
GetHitPadStateAll(); //現在のパッド入力処理を行う
GetHitKeyStateAll_2(); //現在のキー入力処理を行う
return 0;
}
//フォーム画面の処理
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
ChangeWindowMode(true);//ウィンドウモードに設定
//初期化か裏画面化が行われていなかったら
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0)
{
//初期化と裏画面化
return -1;
}
//メインループ関数がエラーを出していなかったら
while(ProcessLoop() == 0)
{
Music_Ini();
switch(func_state)
{
case 0:
Load(); //画像を読み込む
First_Ini(); //初期化関数の呼び出し
func_state = 99; //次の処理へ移行
break;
case 99://STGを始める前に行う初期化
Ini();
Load_Story();
func_state=100;
break;
case 100:
Calc_ch(); //キャラクタアニメーション処理
ch_Move(); //キャラクタの移動制御
Enemy_Main(); //敵情報
Shot_Main(); //ショットメイン
graph_main(); //描画関数呼び出し
Stage_Count++;
break;
default:
printfDx("不明なfunc_stateです。\n変数が不正に書き換えられていないか確認して下さい。");
break;
}
Music_Play();
//エスケープキーが押されたらブレイク(プログラム終了)
if(CheckStateKey(KEY_INPUT_ESCAPE) == 1)
{
break;
}
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
この中になにか呼び出しで問題のある所はございますでしょうか?
私が探した限りではどこが問題なのか理解が及ばず、申し訳ないです。
因みに、試しに「graph_ch()」をコメントアウトしてみると、今度は「graph_enemy()」が定義されてねえよと怒られました。
何卒助言をよろしくお願いします。