ページ 11

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

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

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

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

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

Posted: 2013年2月26日(火) 16:57
by nil
通常のグローバル変数として扱うのであれば、
extern宣言をすることで参照できるようになりますが、
通常はhideさんのおっしゃるとおり取得用の関数を作ります。

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

Posted: 2013年2月26日(火) 22:01
by タコサラダ
なるほど、変数を返す値を作ればいいのですね。
独学で勉強しながらなのでどういうのがあるのか全くわからなくて・・・(苦笑

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

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

Posted: 2013年2月26日(火) 22:40
by タコサラダ
色々調べてみましたが、なかなか分かりにくいですね・・・。
もし、お手数をお掛けですか、よろしければ変数を返す値を使ったソースコードを
書いていただいて教えていただいてもよろしいでしょうか?

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

Posted: 2013年2月26日(火) 23:47
by KORYUOH
イメージできれば幸いです。
ちなみにこれは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";
}

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

Posted: 2013年2月27日(水) 00:25
by ISLe
既に出ている回答とは違う形ですが。

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;
}
#必要なものはいつも目の前にある。