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

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

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

#1

投稿記事 by roji » 4年前

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

コード:

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
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 4年前

roji さんが書きました:
4年前
そして、メインプログラム以外のプログラムに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
登録日時: 4年前

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

#3

投稿記事 by roji » 4年前

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

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

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

#4

投稿記事 by みけCAT » 4年前

コード:

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

roji
記事: 7
登録日時: 4年前

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

#5

投稿記事 by roji » 4年前

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

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

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

#6

投稿記事 by みけCAT » 4年前

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

コード:

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

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

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

#7

投稿記事 by あたっしゅ » 4年前

コード:

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

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

コード:

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

    // DxLib の初期化等(略)

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

extern void init_stage();

を忘れずに。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

roji
記事: 7
登録日時: 4年前

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

#8

投稿記事 by roji » 4年前

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

返信

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