Не видит 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 шт):
Проследил путь, оказалось проблема при компиляции файла map.c, он тащил view.h до определения типа, и вызывал player.h из-за чего и была ошибка. Исправление: поместить #include "view.h" после typedef
Решение очень просто, т.к. ты не используешь в заголовочных файлах никаких полей из структур, то тебе попросту не нужны включения звголовочных файлов в других звголовочных файлах.
Просто определи прототип структуры, и подключай заголовочные файлы только в исходных файлах.
E.G:
/* player.h */
...
typedef struct Game_map Game_map;
...
/* player.c */
#include "map.h"
...