C及びにDxLibのファイル分け

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

C及びにDxLibのファイル分け

#1

投稿記事 by Iseuma14 » 4年前

質問させていただきます
先日、逃げ続けていたファイル分割を勉強し、試しに何も見ずにプログラムの館のキャラクターの操作をファイル分割して作ってみようと思い、以下のコードを書きました

コード:

//main.cpp

#include "DxLib.h"
#include "player.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
	ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
	int key[256];
	int x,y,handle;
	handle = LoadGraph("画像/キャラクタ01.png",TRUE);
	x = 270;
	y = 300;
	while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0)
	{
		DrawGraph(x,y,handle,TRUE);
		player_key_update(key);
		player_move(&x,&y,key);
		player_test();
	}
	DxLib_End();
	return 0;
}

//ここまでmain.cpp  ここから↓player.cpp

#include "DxLib.h"
#define WHITE GetColor(255,255,255)


void player_test()
{
	DrawFormatString(0,0,WHITE,"できてるよ~");
	return;
}

int player_key_update(int key[])
{
	char hoge[256];
	GetHitKeyStateAll(hoge);
	int i;
	for(i=0;i<256;i++)
	{
		if(hoge[i] != 0)
			key[i]++;
		else
			key[i] = 0;
	}
	return 0;
}

void player_move(int *x,int *y,int key[])
{
	if(key[KEY_INPUT_UP] > 1)
		*y--;
	else if(key[KEY_INPUT_DOWN] > 1)
		*y++;
	else if(key[KEY_INPUT_RIGHT] > 1)
		*x++;
	else if(key[KEY_INPUT_LEFT] > 1)
		*x--;

	return;
}

//ここまでplayer.cpp 以下player.h

#ifndef SUM
#define SUM

void player_test();

int player_key_update(int*);

void player_move(int*,int*,int*);

#endif

と作ったところ、

main.obj : error LNK2001: 外部シンボル ""void __cdecl player_move(int *,int *,int *)" (?player_move@@YAXPAH00@Z)" は未解決です。
main.obj : error LNK2001: 外部シンボル ""int __cdecl player_key_update(int *)" (?player_key_update@@YAHPAH@Z)" は未解決です。
C:\Users\owner\Documents\Visual Studio 2010\Projects\ファイル分割\Debug\ファイル分割.exe : fatal error LNK1120: 外部参照 2 が未解決です。

とエラーメッセージが出ました

自分でコメントアウトしたりしておかしい箇所を探したところ、
player.cppの引数付の関数をなくせばリンクエラーが消えたので、この2つの関数に問題があるというのはわかるのですが、
プログラムの館の分割コンパイルの項目を見てもよくわからず困っております。
対処法を教えていただけると幸せです。

乱文長文失礼しました

Rittai_3D
記事: 525
登録日時: 7年前

Re: C及びにDxLibのファイル分け

#2

投稿記事 by Rittai_3D » 4年前

player.cppで
#include "player.h"
してますか?
初心者です

Iseuma14
記事: 54
登録日時: 4年前

Re: C及びにDxLibのファイル分け

#3

投稿記事 by Iseuma14 » 4年前

>Rittai_3D様
お返事ありがとうございます。
ご教授いただきました点を実行したところエラーは取り除くことができましたが、未だ実行結果がおかしいので絶賛修正中です

ところで、今回player.cppにplayer.hをincludeすることで解決できましたが、これはplayer.cpp自体にもかくかんすうのプロトタイプ宣言が必要
という考え方でいいのでしょうか?

また、新・ゲームプログラムの館のd.4章ゲームの設計と分割コンパイル(2)の中のPlayer.cpp では、Player.hをincludeしていないようですが、
今回の場合とどのように異なるのでしょうか?

何度も質問申し訳ございません

Rittai_3D
記事: 525
登録日時: 7年前

Re: C及びにDxLibのファイル分け

#4

投稿記事 by Rittai_3D » 4年前

作る人 さんが書きました:ところで、今回player.cppにplayer.hをincludeすることで解決できましたが、これはplayer.cpp自体にもかくかんすうのプロトタイプ宣言が必要
という考え方でいいのでしょうか?
player.cppに書く必要はないです。
作る人 さんが書きました:また、新・ゲームプログラムの館のd.4章ゲームの設計と分割コンパイル(2)の中のPlayer.cpp では、Player.hをincludeしていないようですが、
今回の場合とどのように異なるのでしょうか?
おそらくDixqさんの書き忘れでしょう(あくまで想像ですが)。
初心者です

Iseuma14
記事: 54
登録日時: 4年前

Re: C及びにDxLibのファイル分け

#5

投稿記事 by Iseuma14 » 4年前

>Rittai_3D様
回答ありがとうございました。
疑問も解決させつつ、しっかりと動作させることができました!

閉鎖

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