ヘッダファイルでのインクルードについて
Posted: 2013年6月20日(木) 02:34
まずプレイヤーの構造体が定義されてるplayer.hと
武器の構造体が定義されてるwapon.hのふたつのヘッダファイルがあります。
これらをコンパイルすると以下のエラーがでました。
wapon.h(58) : error C2061: 構文エラー : 識別子 'PLAYER'
main.cpp(43) : error C2660: 'wapon_move' : 関数に 4 個の引数を指定できません。
1>player.cpp
wapon.h(58) : error C2061: 構文エラー : 識別子 'PLAYER'
1>wapon.cpp
wapon.h(58) : error C2061: 構文エラー : 識別子 'PLAYER'
そこでwapon.hにplayer.hをインクルードすると
1>main.cpp
wapon.h(60) : error C2061: 構文エラー : 識別子 'PLAYER'
main.cpp(43) : error C2660: 'wapon_move' : 関数に 4 個の引数を指定できません。
1>player.cpp
wapon.h(60) : error C2061: 構文エラー : 識別子 'PLAYER'
1>wapon.cpp
player.h(24) : error C2061: 構文エラー : 識別子 'WAPON'
player.h(26) : error C2061: 構文エラー : 識別子 'WAPON'
さらに悪化してしまいました……
一体何が起こっているんでしょう?
下記の質問でbeatleさんが教えてくださった
どっちを先に#includeするかを決められない状態になっているんでしょうか?
分割コンパイルについて
http://dixq.net/forum/viewtopic.php?f=3&t=11496
武器の構造体が定義されてるwapon.hのふたつのヘッダファイルがあります。
//player.h
#ifndef DEF_PLAYER_H
#define DEF_PLAYER_H
#include "wapon.h"
typedef struct{
int py,px;
int oldy,oldx;
bool walkflag;
.
.
.
}PLAYER;
void player_ini(PLAYER *p);
void player_control(PLAYER *p);
void player_attack(PLAYER *p,WAPON w);
void player_draw(PLAYER *p,WAPON w,GUN *gun);
#endif
//wapon.h
#ifndef DEF_WAPON_H
#define DEF_WAPON_H
typedef struct{
int count;
.
.
.
}WAPON;
typedef struct{
int img[8];
int img_number;
int bullet_img;
.
.
.
}GUN;
void wapon_ini(WAPON *w);
void gun_ini(GUN *gun);
void wapon_move(WAPON *w,GUN *gun,PLAYER *p);
#endif
これらをコンパイルすると以下のエラーがでました。
wapon.h(58) : error C2061: 構文エラー : 識別子 'PLAYER'
main.cpp(43) : error C2660: 'wapon_move' : 関数に 4 個の引数を指定できません。
1>player.cpp
wapon.h(58) : error C2061: 構文エラー : 識別子 'PLAYER'
1>wapon.cpp
wapon.h(58) : error C2061: 構文エラー : 識別子 'PLAYER'
そこでwapon.hにplayer.hをインクルードすると
//wapon.h
#ifndef DEF_WAPON_H
#define DEF_WAPON_H
#include "player.h" ☆ここに追加した
typedef struct{
.
.
.
}WAPON;
typedef struct{
int img[8];
int img_number;
int bullet_img;
.
.
.
}GUN;
void wapon_ini(WAPON *w);
void gun_ini(GUN *gun);
void wapon_move(WAPON *w,GUN *gun,PLAYER *p);
#endif
wapon.h(60) : error C2061: 構文エラー : 識別子 'PLAYER'
main.cpp(43) : error C2660: 'wapon_move' : 関数に 4 個の引数を指定できません。
1>player.cpp
wapon.h(60) : error C2061: 構文エラー : 識別子 'PLAYER'
1>wapon.cpp
player.h(24) : error C2061: 構文エラー : 識別子 'WAPON'
player.h(26) : error C2061: 構文エラー : 識別子 'WAPON'
さらに悪化してしまいました……
一体何が起こっているんでしょう?
下記の質問でbeatleさんが教えてくださった
どっちを先に#includeするかを決められない状態になっているんでしょうか?
分割コンパイルについて
http://dixq.net/forum/viewtopic.php?f=3&t=11496