Не видит typedef из header файла

Есть файл player.h:

#ifndef PLAYER_H
#define PLAYER_H

/*-------------Libraries-------------*/
#include <SDL2/SDL.h>
#include <stdlib.h>

#include "map.h"
#include "view.h"
/*-------------Libraries-------------*/

/*---------Typedef---------*/
typedef struct Player
{
    double x;
    double y;
    SDL_Texture *texture;
} Player;
/*---------Typedef---------*/

/*--------Func-Prototypes--------*/
void init_player
( 
    Player *player, Game_Map *game_map,
    char path[], SDL_Renderer *renderer
);
/*--------Func-Prototypes--------*/

#endif

Компилирую таким образом:

#!/bin/bash

gcc -Wall -o roguelite map.c view.c player.c main.c -lSDL2

Выкидывает ошибку:

In file included from view.h:9,
                 from map.h:10,
                 from map.c:1:
player.h:24:21: error: unknown type name ‘Game_Map’
   24 |     Player *player, Game_Map *game_map,
      | 

Почему то не видет тип Game_Map в player.h, хотя перед прототипом функции есть #include "map.h"

map.h:

...
typedef struct
{
    int max_x;
    int max_y;
    char grid[ MAX_Y ][ MAX_X ];
    SDL_Texture *floor_texture;
    SDL_Texture *wall_texture;
} Game_Map;
...

... - другой код.

Если ошибка в том, как я использую #include, ссылка на github с проектом для полной картины: https://github.com/Ilya-Piskurov/SDL_Roguelite/tree/develop


Ответы (2 шт):

Автор решения: ZX-SPECTRUM

Проследил путь, оказалось проблема при компиляции файла map.c, он тащил view.h до определения типа, и вызывал player.h из-за чего и была ошибка. Исправление: поместить #include "view.h" после typedef

→ Ссылка
Автор решения: ori

Решение очень просто, т.к. ты не используешь в заголовочных файлах никаких полей из структур, то тебе попросту не нужны включения звголовочных файлов в других звголовочных файлах.

Просто определи прототип структуры, и подключай заголовочные файлы только в исходных файлах.

E.G:

/* player.h */
...

typedef struct Game_map Game_map;

...

/* player.c */

#include "map.h"
...
→ Ссылка