gpt4 book ai didi

c - 结构问题,将它们放在哪里以及如何在标题中引用它们?

转载 作者:行者123 更新时间:2023-12-02 00:39:35 25 4
gpt4 key购买 nike

好吧,我现在进退两难,我对 C 的了解(反正这不是最重要的)和万能的 Google 似乎都无法帮助我解决这个问题:

我有一些游戏原型(prototype)的结构:

  • map (嗯…… map ……)
  • Chara(敌人玩家的基地)
  • Player(玩家)

现在的问题是:Map 需要对它上面的 Player 的引用,Player 正在构建,给它一个 Map 和一个 CharaChara 也需要 Map

如果我在头文件中声明结构并用 #ifndef 包装它们,当我从其他头文件中包含头文件时,我会遇到循环依赖循环。

当我在 .c 文件中声明结构时,我使用 extern struct Map map 等,但随后我遇到了 invalid use of incomplete declaration结构 XXX 的前向声明

现在是凌晨 4 点,我想花更多时间重写引擎的东西(Python 和 JavaScript 中已经存在了......是的,我有太多时间了!)而不是在剩下的晚上尝试所有可行的搜索词组合。

我知道这可能是一件非常容易的事情,但这里有 30°C,所以请怜悯我的 C“技能”^^

编辑
由于我的问题使用了 typedef,而 caf 的答案没有包括它们,所以我不得不多花点功夫才能让它正常工作。因此,为了帮助可能通过 SE 找到此答案的人,我将添加以下代码:

map .h

typedef struct _Player Player;

typedef struct _Map {
...
Player *player;
...
} Map;

ma​​p.c

// include both player.h and chara.h

播放器.h

typedef struct _Map Map;
typedef struct _Chara Chara;

typedef struct _Player {
Chara *chara;
...
} Player;

Player *player_create(Map *map, int x, int y);

player.c

// include player.h, chara.h and map.h

最佳答案

如果您的结构仅包含指向其他结构的指针,则此方法有效:

ma​​p.h

#ifndef _MAP_H
#define _MAP_H

struct player;

struct map {
struct player *player;
...
};

#endif /* _MAP_H */

chara.h

#ifndef _CHARA_H
#define _CHARA_H

struct map;

struct chara {
struct map *map;
...
};

#endif /* _CHARA_H */

player.h

#ifndef _PLAYER_H
#define _PLAYER_H

struct map;
struct chara;

struct player {
struct map *map;
struct chara *chara;
...
};

#endif /* _PLAYER_H */

如果您的一个结构包含其他结构(包括数组)的实际实例,那么该结构也需要 #include 另一个 header 。例如,如果 map 包含玩家数组:

ma​​p.h

#ifndef _MAP_H
#define _MAP_H

#include "player.h"

struct map {
struct player p[10];
...
};

#endif /* _MAP_H */

不过,您必须小心循环包含。如果您在 player.h 中包含了 map.h,那么您不能在 map 之前的另一个源文件中包含 player.h .h - 所以你不会那样做。

关于c - 结构问题,将它们放在哪里以及如何在标题中引用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3154764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com