【问题标题】:Struct from one header file in another header file从另一个头文件中的一个头文件构造
【发布时间】: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.iemacs Player.i
  • 顺便说一句,您的函数create_player 实际上并没有创建播放器。它返回一个无效的指针。
  • 您是否遇到任何其他错误 - 例如包括“Player.h”失败? Player.h 是否在正在编译的源文件的包含路径中?
  • @BasileStarynkevitch 我试过了,但我没明白这有什么意义......

标签: c struct include typedef header-files


【解决方案1】:

尝试在不使用 typedef 的情况下定义它们。

【讨论】:

  • 我不这么认为。一旦你做了一个 typedef,这个名字就不能再使用了,就像你可以做struct foo foo,但不能做typedef something foo; foo foo;,即它污染了命名空间。它并没有真正增加太多。
  • 它增加了很多可读性。看看 Gtk 正在做什么。
  • 但是为什么我不能使用typedef??为什么它不起作用?
  • -1 因为这不会解决任何问题,甚至与错误无关。使用 typedef。
猜你喜欢
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多