別の.cppの変数を使う時は?

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

別の.cppの変数を使う時は?

#1

投稿記事 by タコサラダ » 6年前

C言語を始めたばかりで右も左も分からない初心者です。
今ゲームを作っているのですが
確認用DrawString.cppとマウス.cppというファイルがあります。
マウス.cppの方に変数int MouseX,MouseYがあります。
GetMousePointでマウスの座標を取得して、MouseX,MouseYに座標を入力しまいた。
これを確認用DrawStringの方でDrawFormatStringを使って画面にMouseX,MouseYの値を表示したいのですが、
どのようにすればいいでしょうか?

hide

Re: 別の.cppの変数を使う時は?

#2

投稿記事 by hide » 6年前

マウス.cppに int GetMouseX(void) int GetMouseY(void) のような returnで変数の値を返す関数を作り、
マウス.h 作ってそっちに関数の宣言をして確認用DrawString.cppにインクルードするといいです。
このやり方だと 「別の.cppの変数を使う」 というより 「別の.cppの変数の値を取得する」 といった考え方ですが
あっちこっちから変数が変更できる設計はよろしくないので取得のみができる方が扱いやすいです。

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

Re: 別の.cppの変数を使う時は?

#3

投稿記事 by nil » 6年前

通常のグローバル変数として扱うのであれば、
extern宣言をすることで参照できるようになりますが、
通常はhideさんのおっしゃるとおり取得用の関数を作ります。

タコサラダ

Re: 別の.cppの変数を使う時は?

#4

投稿記事 by タコサラダ » 6年前

なるほど、変数を返す値を作ればいいのですね。
独学で勉強しながらなのでどういうのがあるのか全くわからなくて・・・(苦笑

色々サイトなどで調べてみます!
教えてくださったお二人様。
ご教授ありがとうございます!

タコサラダ

Re: 別の.cppの変数を使う時は?

#5

投稿記事 by タコサラダ » 6年前

色々調べてみましたが、なかなか分かりにくいですね・・・。
もし、お手数をお掛けですか、よろしければ変数を返す値を使ったソースコードを
書いていただいて教えていただいてもよろしいでしょうか?

KORYUOH
記事: 44
登録日時: 7年前

Re: 別の.cppの変数を使う時は?

#6

投稿記事 by KORYUOH » 6年前

イメージできれば幸いです。
ちなみにこれはhello,worldが表示されるだけのプログラムです。

このようなものでも大丈夫ですか?

main.c

コード:

#include <stdio.h>
#include "hello.h"

int main(void){
    printf("%s\n",hello());
    return 0;
}
hello.h

コード:

extern char* hello();
hello.c

コード:

#include "hello.h"
char* hello(){
    return "hello,world";
}
C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。 C++を使えばそのような間違いを犯しにくくなる。しかし、やってしまったときには足全体が無くなる。

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: 別の.cppの変数を使う時は?

#7

投稿記事 by ISLe » 6年前

既に出ている回答とは違う形ですが。

mouse.cpp

コード:

#include "DxLib.h"

static int MouseX, MouseY;

void Mouse_Update()
{
	GetMousePoint(&MouseX, &MouseY);
}

void Mouse_GetPoint(int *XBuf, int *YBuf)
{
	*XBuf = MouseX;
	*YBuf = MouseY;
}
mouse.h

コード:

void Mouse_Update();
void Mouse_GetPoint(int *XBuf, int *YBuf);
使用例

コード:

#include "DxLib.h"
#include "mouse.h"
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	ChangeWindowMode(TRUE);
	if (DxLib_Init() != 0) return 0;
	SetDrawScreen(DX_SCREEN_BACK);
	
	while (ProcessMessage() == 0 && ScreenFlip() == 0 && ClearDrawScreen() == 0) {
		Mouse_Update();
		int mx, my;
		Mouse_GetPoint(&mx, &my);
		DrawFormatString(0, 0, GetColor(255,255,255), "X:%d Y:%d", mx, my);
	}
	
	DxLib_End();
	return 0;
}
#必要なものはいつも目の前にある。

閉鎖

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