error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yjhfgsだsd

error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

#1

投稿記事 by yjhfgsだsd » 11年前

コード:

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

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定]

        int x = 0;
        int Handle01;     // 画像格納用ハンドル
        Handle01 = LoadGraph( "画像/キャラクタ01.png" ); // 画像のロード

                // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){

			GetHitKeyStateAll_2();

			DrawGraph( x+100,   330, Handle01, TRUE ); //画像の描画

			if(CheckStateKey(KEY_INPUT_LEFT)>=1)
				x-=4; // xを1増やす
			if(CheckStateKey(KEY_INPUT_RIGHT)>=1)
				x+=4; // xを1増やす
        }
        
        DxLib_End(); // DXライブラリ終了処理
        return 0;
} 
 

コード:

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

int GetHitKeyStateAll_2(){
    char GetHitKeyStateAll_Key[256];
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++){
        if(GetHitKeyStateAll_Key[i]==1)
			stateKey[i]++;
        else                            
			stateKey[i]=0;
    }
    return 0;
};

int CheckStateKey(unsigned char Handle){
        return stateKey[Handle];
};
 

コード:

 
#ifndef DEF_HEADER_H
#define DEF_HEADER_H

unsigned int stateKey[256];

int GetHitKeyStateAll_2();

int CheckStateKey(unsigned char Handle);

#endif
 

これでキャラ左右に動かすプログラムをヘッダファイルに分けたのですが
[は既に Source.obj で定義されています。]
とエラーがでます
どうすればいいですか

Blue

Re: error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

#2

投稿記事 by Blue » 11年前

3番目のファイルが Header.h ということであるならば、
1番目のファイルと2番目のファイルで
#include"Header.h"
とあるため、どちらでも
unsigned int stateKey[256];
が定義されることになるため
[は既に Source.obj で定義されています。]
というようなエラーが出ます。

ヘッダファイルのほうにexternを付けて、1番目のファイルか2番目のファイルのどちらかで
unsigned int stateKey[256];
を定義してみてください。


詳しくはexternで検索してみるといいと思います。

nil
記事: 428
登録日時: 13年前

Re: error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

#3

投稿記事 by nil » 11年前

Blue さんが書きました: ヘッダファイルのほうにexternを付けて、1番目のファイルか2番目のファイルのどちらかで
unsigned int stateKey[256];
を定義してみてください。
この場合はstateKeyにアクセスするための関数が使われているので、
グローバル変数にせずに
ファイルローカルのstatic変数にしたほうが良いかと思います。
なので、
ヘッダーから
unsigned int stateKey[ 256 ];
を消し、
int GetHitKeyStateAll_2()の前に
static unsigned int stateKey[ 256 ];
を記述するほうがベターかと思います

閉鎖

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