我已经在听过一堆线索,还有一些我在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*;
所有人都给了我这个错误:
“未知类型名称'房间'”
我想将这些结构保存为单独的头文件。
答案 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)
不是创建匿名结构并键入它们,而是为结构提供如下特定名称:
typedef struct Door_ Door;
typedef struct Room_ Room;
#include "common.h"
struct Room_ {
Door* doors[3];
};
#include "common.h"
struct Door_ {
Room *room1;
Room *room2;
};
虽然,如果您计划将room.h
和door.h
一起使用,我只需制作一个文件即可将所有定义放入其中。