キーを使えるようにする。

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

キーを使えるようにする。

#1

投稿記事 by roji » 2週間前

複数のプログラムでキーを入力するのですが、メインのプログラムに以下のプログラムを書きました。

コード:

int Key[256];

int gpUpdateKey()
{
	char tmpKey[256];
	GetHitKeyStateAll(tmpKey);
	for (int i = 0; i < 256; i++)
		(tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;
	return 0;
}
そして、メインプログラム以外のプログラムにvoid Player_Update()という関数を作り
そこに

コード:

int Key[256];

int gpUpdateKey()
{
	char tmpKey[256];
	GetHitKeyStateAll(tmpKey);
	for (int i = 0; i < 256; i++)
		(tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;
	return 0;
}
と書きたいですが二重の定義になるので、

コード:

Key[256];gpUpdateKey();
と書いたのですが、エラーが出ます。
二重定義にならないようにどう書けばいいでしょうか。

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

Re: キーを使えるようにする。

#2

投稿記事 by みけCAT » 2週間前

roji さんが書きました:
2週間前
そして、メインプログラム以外のプログラムにvoid Player_Update()という関数を作り
そこに

コード:

int Key[256];

int gpUpdateKey()
{
	char tmpKey[256];
	GetHitKeyStateAll(tmpKey);
	for (int i = 0; i < 256; i++)
		(tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;
	return 0;
}
と書きたいですが
The XY Problemの疑いがあります。
なぜそのように書きたいのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

roji
記事: 7
登録日時: 2週間前

Re: キーを使えるようにする。

#3

投稿記事 by roji » 2週間前

キー入力を行いたいためです。

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

Re: キーを使えるようにする。

#4

投稿記事 by みけCAT » 2週間前

コード:

extern int Key[256];
と書くと良さそうな気がします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

roji
記事: 7
登録日時: 2週間前

Re: キーを使えるようにする。

#5

投稿記事 by roji » 2週間前

どうもありがとうございます。
解決できました。
もう一つ、こちらのヘッダファイルのプログラムhttps://pastebin.com/LMYV3Ph6に関して質問があります。
初期化をするためにinit_stage(); // stage, pos の初期化と書いたのですが、赤い下線部が発生しエラーになります。
関数定義が見つからないと言っているのですが、なぜvoid init_stage()を書いているのにエラーが出るのでしょうか。

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

Re: キーを使えるようにする。

#6

投稿記事 by みけCAT » 2週間前

C++ではこのように式文を関数定義の外に書くことはできないからです。

コード:

init_stage(); // stage, pos の初期化
を関数定義の本体の中に入れるなどの修正方法が考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
あたっしゅ
記事: 256
登録日時: 9年前
住所: 東京23区
連絡を取る:

Re: キーを使えるようにする。

#7

投稿記事 by あたっしゅ » 2週間前

コード:

init_stage(); // stage, pos の初期化
を、コンパイラが、関数 int init_stage() の定義をしているのだろうと、認識しているからです。

 一つの方法として、void init_stage() の本体があるソースで呼び出すのではなく、

コード:

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

    // DxLib の初期化等(略)

    init_stage();
    
    // (略)
}
という風に、呼び出してください。

extern void init_stage();

を忘れずに。
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

roji
記事: 7
登録日時: 2週間前

Re: キーを使えるようにする。

#8

投稿記事 by roji » 2週間前

みけさん、あたっしゅさんありがとうございます。
関数の中にinit_stage();を書いたところ解決しました。

返信

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