分割コンパイルによる再定義、オーバーロードエラーがでます。
Posted: 2011年6月18日(土) 19:49
上キーと下キーで角度を操作して弾を飛ばすプログラムです。
そのプログラムを分割したのが以下です。
main.cpp
load.h
input.h
input.cpp
このようなプログラムをデバックにかけてみたところ
1>.\input.cpp(5) : error C2556: 'int gpUpdateKey(void)' : オーバーロード関数は、'void gpUpdateKey(void)' と戻り値の型のみが異なります。
1> c:\documents and settings\sood\デスクトップ\gameprog\input.h(4) : 'gpUpdateKey' の宣言を確認してください。
1>.\input.cpp(5) : error C2371: 'gpUpdateKey' : 再定義されています。異なる基本型です。
1> c:\documents and settings\sood\デスクトップ\gameprog\input.h(4) : 'gpUpdateKey' の宣言を確認してください。
というエラー(その他型の変換警告)が出ました。
自分でも違和感はあるのですがいまいちどこを直せばいいのかわかりません。
main.cpp
↑
load.h← input.h← input.cpp
↑ ↓
←←←←←←←←←←←
↑自分の頭の中ではこのようになっています。
そのプログラムを分割したのが以下です。
main.cpp
#include "load.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
int Handle[3]; // 画像格納用ハンドル
LoadDivGraph( "画像/弾01.png", 3, 3, 1, 14, 16, Handle ); // 3つに画像を分割してロード
float D_x=320,D_y=240,x=320,y=240,angle=0,speed=1,angle_tmp=0;//初期値デフォx,y,tmpx,y
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
//計算フェーズ
x += cos( angle ) * speed; // x座標を更新
y += sin( angle ) * speed; // y座標を更新
if( Key[KEY_INPUT_UP]!=0) angle_tmp -=1/(PI*2);
if( Key[KEY_INPUT_DOWN]!=0) angle_tmp +=1/(PI*2);
if( Key[KEY_INPUT_Z] == 1 ){//zが押されていたら変数の中身を変更
x = D_x; //初期座標にセット
y = D_y;
speed = 10; //0.5~2.5の乱数を生成
angle=angle_tmp;
}
//描画フェーズ
DrawRotaGraph( x, y, 1.0, angle+PI/2, Handle[0], TRUE );//弾を描画
DrawRotaGraph( D_x, D_y, 1.0, angle_tmp+PI/2, Handle[0], TRUE );//弾を描画
DrawFormatString( 0,0,GetColor(255,255,255), "angle=%.2f, speed=%.2f\n", angle, speed );
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
#ifndef LOAD_DEF //二重include防止
#define LOAD_DEF
#include <math.h>
#include "DxLib.h"
#include "input.h"
int Key[256]; // キーが押されているフレーム数を格納する
#define PI 3.1415926
#endif
#include "load.h"
#include "input.h"
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
1>.\input.cpp(5) : error C2556: 'int gpUpdateKey(void)' : オーバーロード関数は、'void gpUpdateKey(void)' と戻り値の型のみが異なります。
1> c:\documents and settings\sood\デスクトップ\gameprog\input.h(4) : 'gpUpdateKey' の宣言を確認してください。
1>.\input.cpp(5) : error C2371: 'gpUpdateKey' : 再定義されています。異なる基本型です。
1> c:\documents and settings\sood\デスクトップ\gameprog\input.h(4) : 'gpUpdateKey' の宣言を確認してください。
というエラー(その他型の変換警告)が出ました。
自分でも違和感はあるのですがいまいちどこを直せばいいのかわかりません。
main.cpp
↑
load.h← input.h← input.cpp
↑ ↓
←←←←←←←←←←←
↑自分の頭の中ではこのようになっています。