【发布时间】:2012-01-26 14:45:44
【问题描述】:
我要经历这真的很长一段时间,但仍然看不出问题出在哪里。
让我们有头文件 Player.h
#ifndef PLAYER_H_
#define PLAYER_H_
typedef struct player
{
char *name;
int gameId;
int socketfd;
int points;
int state;
}player_struct;
#endif /* PLAYER_H_ */
让我们有第二个头文件 Game.h
#ifndef GAME_H_
#define GAME_H_
#include "Player.h"
#define NUMBEROFPLAYERS 2
typedef struct game
{
//Here
}game_struct;
#endif /* GAME_H_ */
我的 typedef 的目的是让 player_struct 使用这样的类型:
它是源文件 Player.c - 这行得通。
#include "Player.h"
player_struct *create_player
{
player_struct *player;
//body malloc ....
return player;
}
我使用 C 和 C++ 的 Eclipse 编辑器,我有使用 Linux GCC 编译的 C 项目。
为什么即使我已经包含头文件 Player.h,我也无法在头文件 game.h 中使用与在 Player.C 中相同的类型 player_struct?
在头文件 game.h 中评论 //这里我想使用
player_struct *players[NUMBEROFPLAYERS];
但它写道无法解析 dame 类型..
无法解析类型“player_struct”
我尝试了很多方法来编写 struct 和 typedef,但没有任何帮助。 我真的不明白它有什么想法吗? 谢谢。
编辑:
我被要求把我所有的代码放在那里:
当我使用类型 player_struct(它是第一行)时,问题出现在标题 Game.h 中。
首先
/* Player.h */
#ifndef PLAYER_H_
#define PLAYER_H_
typedef struct player{
char *name; // player name
int gameId; // what game
int points; //how money points
int socketfd; //socket descriptor of player
int state;
} player_struct;
//create player
player_struct *create_player();
//delete player
void delete_player(player_struct *player);
#endif /* PLAYER_H_ */
秒
/* Game.h */
#ifndef GAME_H_
#define GAME_H_
#include "Player.h"
//#include "Card.h"
#define PLAYERSLEN 2 // number of players
#define GAMESLEN 10 //number of games
#define CARDSLEN 64 //cards in one game
typedef struct game{
player_struct *players[PLAYERSLEN];//here is the problem
//card_struct *cards[CARDSLEN]; //her will be same problem
int active;
int playerOnTurn;
char *gameName;
int gameId;
}games_struct;
//typedef struct game game_struct;
//extern games_struct *games_array[GAMESLEN];
void init_game(games_struct *game);
void run_game(games_struct *game);
void *end_game(games_struct *game);
#endif /* GAME_H_ */
【问题讨论】:
-
查看
*.c代码文件的预处理形式。在 Linux 上,您将使用gcc -C -E Player.c > Player.i获取它们,然后在它们上启动寻呼机或编辑器,例如less Player.i或emacs Player.i -
顺便说一句,您的函数
create_player实际上并没有创建播放器。它返回一个无效的指针。 -
您是否遇到任何其他错误 - 例如包括“Player.h”失败? Player.h 是否在正在编译的源文件的包含路径中?
-
@BasileStarynkevitch 我试过了,但我没明白这有什么意义......
标签: c struct include typedef header-files