两个结构在不同的头文件中,都使用另一个

时间:2012-07-13 03:15:44

标签: c struct header-files

我已经在听过一堆线索,还有一些我在Google上找到的其他人。我似乎无法做到这一点。

//Room.h
#ifndef ROOM_H
#define ROOM_H

#include "Door.h"

typedef struct {
   Door* doors[3];

} Room;

#endif

//Door.h
#ifndef DOOR_H
#define DOOR_H

#include "Room.h"

typedef struct {
   Room* room1;
   Room* room2;
} Door;

//main.c
#include <stdio.h>
#include "Room.h"
int main() { ... }

我已经尝试将其添加到Door.h的顶部

typedef struct Room room1;
//typedef struct Room* room1;
//typedef stuct Room;
//typedef struct Room*;

所有人都给了我这个错误:

“未知类型名称'房间'”

我想将这些结构保存为单独的头文件。

3 个答案:

答案 0 :(得分:8)

试试这样:

typedef struct Room Room;
typedef struct Door Door;

struct Room{
   Door* doors[3];
};

struct Door{
   Room* room1;
   Room* room2;
};

前两行是允许它们互相引用的类型声明。

只要前两行出现在头文件中,如何将它们分开就无关紧要了。


在您的情况下,可以按如下方式拆分:

<强> room.h

typedef struct Door Door;

struct Room{
   Door* doors[3];
};

<强> door.h

typedef struct Room Room;

struct Door{
   Room* room1;
   Room* room2;
};

答案 1 :(得分:4)

结构参考的C-方式:

room.h

typedef struct Room_s {
  struct Door_s * doors[3];
} Room_t;

door.h

typedef struct Door_s {
  struct Room_s *room1;
  struct Room_s *room2;
} Door_t;

答案 2 :(得分:1)

不是创建匿名结构并键入它们,而是为结构提供如下特定名称:

COMMON.H

typedef struct Door_ Door;
typedef struct Room_ Room;

room.h

#include "common.h"

struct Room_ {
  Door* doors[3];
};

door.h

#include "common.h"

struct Door_ {
  Room *room1;
  Room *room2;
};

虽然,如果您计划将room.hdoor.h一起使用,我只需制作一个文件即可将所有定义放入其中。