C++ &引用;错误:';地牢';未在此范围内声明;但包含在标题中

C++ &引用;错误:';地牢';未在此范围内声明;但包含在标题中,c++,C++,在过去的一个小时里,我一直在研究具有相同错误但不完全相同问题的线程,所以我决定问问自己。我正在为学校的一个项目工作。这是一个有多个头文件和cpp文件的游戏。我刚刚将文件从c文件转换为cpp文件,我正在将结构更改为类(赋值时需要这样做) 我得到以下错误: 这是我的character.h文件: #ifndef CHARACTER_H # define CHARACTER_H # include <stdint.h> # include "dims.h" # include "dun

在过去的一个小时里,我一直在研究具有相同错误但不完全相同问题的线程,所以我决定问问自己。我正在为学校的一个项目工作。这是一个有多个头文件和cpp文件的游戏。我刚刚将文件从c文件转换为cpp文件,我正在将结构更改为类(赋值时需要这样做)

我得到以下错误:

这是我的character.h文件:

#ifndef CHARACTER_H
# define CHARACTER_H

# include <stdint.h>

# include "dims.h"
# include "dungeon.h"

class character_t {
 public:
  char symbol;
  pair_t position;
  int32_t speed;
  uint32_t alive;
  uint32_t sequence_number;
  uint32_t kills[num_kill_types];
};

int32_t compare_characters_by_next_turn(const void *character1, const void *character2);
uint32_t can_see(dungeon_t *d, character_t *voyeur, character_t *exhibitionist);
void character_delete(void *c);

#endif
我知道这很值得一看,但你知道这是什么原因吗?我显然包括了地牢。h头球。我已经看到了循环标题包含的提及,但我不明白当两个标题都需要对方时如何避免这种情况

编辑:
我感谢你的帮助。你的回答比一个小时左右的自我反省更有帮助。你在我能够精简邮件内容之前就解决了我的问题。

你在递归标题includes方面有问题:
dungeon.h
包括
character.h
character.h
包括
dungeon.h
。为了解决这个问题,你可以写一个带有
dungeon\t
转发声明的标题,并将其包含在
character.h
中。

这是一个很值得一看的问题。你可以把它简化成一个简单的例子。只需删除不相关的部分,直到剩下最小的完整代码来复制循环包含的错误。
dungeon.h
包含在
character.h
中,而
character.h
包含在
dungeon.h
中。您可以通过转发声明(基本上是说“这个类存在,我稍后会告诉你”),然后在使用它的类之后包含标题。你可以通过web搜索找到关于它的信息,我确信它也有一个副本
#ifndef DUNGEON_H
# define DUNGEON_H

# include "heap.h"
# include "macros.h"
# include "dims.h"
# include "character.h"

class dungeon_t
{
 public:
  uint32_t num_rooms;
  room_t *rooms;
  terrain_type_t map[DUNGEON_Y][DUNGEON_X];
  uint8_t hardness[DUNGEON_Y][DUNGEON_X];
  uint8_t pc_distance[DUNGEON_Y][DUNGEON_X];
  uint8_t pc_tunnel[DUNGEON_Y][DUNGEON_X];
  character_t *character[DUNGEON_Y][DUNGEON_X];
  character_t pc;
  heap_t events;
  uint16_t num_monsters;
  uint16_t max_monsters;
  uint32_t character_sequence_number;                                  
  uint32_t time;
  uint32_t quit;
};

#endif