ページ 11

分割コンパイルの間違いを指摘してください><

Posted: 2014年2月15日(土) 23:46
by naponapo
DxLibで分割コンパイルというものを初めて学びました
そこで、簡単なファイルで試してみようと思ったのですが、次のヘッダーファイルがmainファイルにincludeできなくて困っています
基本的な間違いかもしれないですが、どうしなければいけなかったのか指摘して欲しいです

コード:

 //mark.cppファイル
#include <DxLib.h>

char key[256];
void gpKeyStateAll(){   //全てのキー情報を得る
	   char a[256];
	   GetHitKeyStateAll(a);
	   for(int i=0;i<256;i++){
	     if(a[i]==1)
			 key[i]++;
		 else
			 key[i]=0;
	   
	   };


}
void motion(char *p,int *x,int *y){  //文字を四方向に動かす
	gpKeyStateAll();
	if(key[KEY_INPUT_RIGHT]==1){
	    *x+=128;
	}
	if(key[KEY_INPUT_LEFT]==1){
	    *x-=128;
	}
	if(key[KEY_INPUT_UP]==1){
	    *y-=128;
	}
	if(key[KEY_INPUT_DOWN]==1){
	    *y+=128;
	}
}  

コード:

// プロトタイプ宣言 mark.hファイル
#ifndef mark
#define mark
static char *p;
static int *x;
static int *y;
void gpKeyStateAll();

void motion(char *p,int *x,int *y);

#endif  

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月15日(土) 23:56
by softya(ソフト屋)
#includeされていない様ですよ。
#include "mark.h"
を書かないといけません。
あとstaticな変数は何の意味があるのでしょうか。

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月15日(土) 23:57
by みけCAT
naponapo さんが書きました:次のヘッダーファイルがmainファイルにincludeできなくて困っています
エラーメッセージが出る場合、それを貼り付けてください。(ユーザー名などの個人情報の漏洩に気をつけてください)
著作権や業務上の秘密などの問題がなければ、mainファイルも提示していただけるとわかりやすくなってありがたいです。

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 00:20
by naponapo
すみません><
そもそもmainでincludeした時点でそこにエラーが出るものですから
mainのファイルは貼ってませんでした
includeができないので(製作途中なので)、宣言した関数を使っていないのですが
こんな感じです
みけcatさん注意ありがとうございます
エラーを貼るときは気をつけます

コード:

//test.cppファイル(メイン)
#include <DxLib.h>
#include<mark.h>
 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen( DX_SCREEN_BACK );
		
		int color=GetColor(255,255,255);
		
		SetFontSize(128);
		
		while(ProcessMessage()==0){
		   DrawFormatString(0,0,color,"*");
		
		   ScreenFlip();
		   ClearDrawScreen();
		
		}; 
エラー;1>test.cpp(2): fatal error C1083: include ファイルを開けません。'mark.h': No such file or directory

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 00:25
by softya(ソフト屋)
#include<mark.h>
ではなく
#include "mark.h"
です。
ライブラリのヘッダではありませんので。
<>と""の違いを勉強して下さい。

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 00:45
by naponapo
ありがとうございます 解決しました
ライブラリのヘッダは<>で自作のヘッダは””で囲むのですね
勉強になりました
おかげさまで先に進めます
回答してくださったみなさん本当にありがとうございました

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 00:49
by softya(ソフト屋)
これ大丈夫ですか?
> あとstaticな変数は何の意味があるのでしょうか。

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 02:11
by naponapo
この場合は、ほかの mark.h 内の関数に 宣言した変数は使用されてないのでstaticはつけなくてよかったですかね
理解が甘かったです

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 08:30
by みけCAT
naponapo さんが書きました:この場合は、ほかの mark.h 内の関数に 宣言した変数は使用されてないのでstaticはつけなくてよかったですかね
理解が甘かったです
このままstaticだけを外すと、多重宣言でエラーが発生するはずです。
代わりに「別のもの」をつければ大丈夫です。

Re: 分割コンパイルの間違いを指摘してください><

Posted: 2014年2月16日(日) 09:02
by softya(ソフト屋)
引数なので、まったく必要がないんじゃないでしょうか。