ファイル分割について

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

ファイル分割について

#1

投稿記事 by y » 16年前

今までは、一つのファイルで作っていたのですが、長くなりすぎたためここのサイトを参考にして、
ファイル分割をしようとしたのですが、エラーが出て困っています。
ヘッダファイルに問題があるようなのですが、どこが悪いのかわからないため質問させていただきました。

↓がヘッダファイルの中身です
#include "DxLib.h"
#include "math.h"

#ifdef d
	#define D exturn 
#else 
	#define d
	#define D
	
#endif


#define PI (3.1415192524)
#define CHAR_HEIGHT (40)
#define CHAR_WIDHT  (20)
#define CHIP_SIZE  (10)
#define WINDOW_HEIGHT (480)
#define WINDOW_WIDHT (640)
#define MAP_HEIGHT ( WINDOW_HEIGHT / CHIP_SIZE )
#define MAP_WIDHT  ( WINDOW_WIDHT / CHIP_SIZE )


typedef struct{
	int Gra ;
	int Flag ;
	double x ;
	double y ;
	int HP ;
	double SpAdd ;
	double SpMax ;
	double JpAdd ;
	double JpMax ;
	double DownSP ;
	double Move_x ;
	double Move_y ;
	int SelectWepon [2] ;
} Character_t ;
typedef struct{
	int All_Bullet [3][2] ;
	int Shot_Time [3][2][20] ;
	int Pow [3][2][20] ;
	double Speed [3][2][20] ;
	int Acc [3][2][20] ;
	double Angle [3][2][20] ;
	int AimSP [3][2][20] ;
} Wepon_t ;
typedef struct{
	int Flag [30] ;
	int x[30] ;
	int y[30] ;
	int Move_x[30] ;
	int Move_y[30] ;
	int DownSp [30] ;
	int Pow [30] ;
	int Speed[30] ;
} Bullet_t ;
typedef struct{
    int x;
    int y;         
    int WheelRotVol;
    unsigned int Button[8];  
}Mouse_t;

D char Map[MAP_HEIGHT][MAP_WIDHT] ;
D Mouse_t Mouse;
D int Key[256] ; 
D Character_t Player ;
D Character_t Enemy[10] ;
D Wepon_t PlayerWepon[2] ;
D Wepon_t EnemyWepon[10][2] ;
D Bullet_t PlayerBullet ;
D Bullet_t EnemyBullet[10] ;

D void First();
D void FAuto();
D int GetHitKeyStateAll_2(int KeyStateBuf[/url]) ;
D void EAct () ;
D void Input () ;
D void Move () ;
D int Move_MapHit ( Character_t *C ) ;

dic

Re:ファイル分割について

#2

投稿記事 by dic » 16年前

exturn -> extern ですね

y

Re:ファイル分割について

#3

投稿記事 by y » 16年前

ずっと、extern の ミスに気がつきませんでした…

で、直してみたのですが、エラーが出てしまいました…

情報が少ないような気がするので、一応出ているエラーを貼り付けておきます。

dic

Re:ファイル分割について

#4

投稿記事 by dic » 16年前

----------  main.cpp ----------
#include	<stdio.h>
#define	d
#include	"D.h"

void	main()
{
	Key[0] = 0;

	Move();
}

  ----------  D.cpp  ----------
#include	"D.h"

void	Move()
{
	printf( "Move\n" );
}

  ----------  D.h  ----------
#include	<stdio.h>	//	for printf()
#include "math.h"

#ifdef d
	#define D extern
#else 
	#define d
	#define D
	
#endif


D int Key[256] ; 

D void Move () ;
で どうでしょうかね

症状としては外部変数externの扱い方がおかしいようですね

注目するのは main.cpp の #define d ですね

Justy

Re:ファイル分割について

#5

投稿記事 by Justy » 16年前

 エラーの下半分から推測するに、コンパイラ・リンカの設定がおかしいように見えます。
 DXライブラリ使用時のプロジェクトの設定を一度確認してみることをお勧めします。

y

Re:ファイル分割について

#6

投稿記事 by y » 16年前

dicさんのところに書かれているのを貼り付けて、ビルドしてみたのですが、

LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\k\My Documents\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

というエラーが出てしまいました。
設定とかも見直してみたもののちゃんと設定しているはずなんですが…

dic

Re:ファイル分割について

#7

投稿記事 by dic » 16年前

Win32 Console Application でビルドしないといけないはずだけど
Win32 Application でビルドしてないでしょうか?
ワークスペース(ソリューション)の新規作成からやり直してみてください

(※VC2008はソリューションって言うんでしたっけ?)

y

Re:ファイル分割について

#8

投稿記事 by y » 16年前

いろいろ簡単なのを作って試行錯誤してみたところ、
Dxライブラリで、エラーが起こっているようなんですけど、設定とか見直しても、
直し方がわかりません。
----main.cpp----

#define IFDEF
#include "setting.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
						 

{
	if( DxLib_Init() == -1 )	
	{
		 return -1;
	}




	test() ;


	DxLib_End() ;		

	return 0 ;		
}

----setting.h----

#include "DxLib.h"
#include "math.h"



#ifdef IFDEF

	#define DEF  extern

#else 

	
	#define DEF 

	

#endif


DEF int x ;

DEF void test () ;

----a.cpp----

#include	"setting.h"



void	test()

{
	x = 0 ;

	return ;


}
で出るエラーが、

libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_execute が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_adjust_parameters が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_request_workspace が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_setup が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _write_stdout が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_stdin が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_scan_script が関数 _parse_switches で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
C:\Documents and Settings\All Users\Documents\y.m.b\Debug\y.m.b.exe : fatal error LNK1120: 外部参照 9 が未解決です。

なのですが、どうすればいいのかわかりません。

pooka

Re:ファイル分割について

#9

投稿記事 by pooka » 16年前

プロジェクトを作成するときにWin32コンソールアプリケーションを選びませんでしたか?
試しにやってみると同じエラーが出ました。
Win32プロジェクトを選んでみてください。

閉鎖

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