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

Coo*_*Joe 8 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() { ... }
Run Code Online (Sandbox Code Playgroud)

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

typedef struct Room room1;
//typedef struct Room* room1;
//typedef stuct Room;
//typedef struct Room*;
Run Code Online (Sandbox Code Playgroud)

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

"未知类型名称'房间'"

我想保持这些结构单独的头文件.

Mys*_*ial 8

试试这样:

typedef struct Room Room;
typedef struct Door Door;

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

struct Door{
   Room* room1;
   Room* room2;
};
Run Code Online (Sandbox Code Playgroud)

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

只要前两行出现在头文件中,如何将它们分开并不重要.


在您的情况下,它们可以拆分如下:

room.h

typedef struct Door Door;

struct Room{
   Door* doors[3];
};
Run Code Online (Sandbox Code Playgroud)

door.h

typedef struct Room Room;

struct Door{
   Room* room1;
   Room* room2;
};
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此方法将Door的typedef放入room.h,将room的typedef放入door.h. 这是一个等待发生的维护,特别是如果你有更多这些. (2认同)

Dmi*_*roh 4

C 结构体引用方式:

房间.h

typedef struct Room_s {
  struct Door_s * doors[3];
} Room_t;
Run Code Online (Sandbox Code Playgroud)

门.h

typedef struct Door_s {
  struct Room_s *room1;
  struct Room_s *room2;
} Door_t;
Run Code Online (Sandbox Code Playgroud)

  • 为什么这能解决它?一个结构仍会在另一个结构之前声明吗? (2认同)