Ниже приведен файл engine_text.h, где я пытаюсь включить библиотеки FreeType. Я хочу включить библиотеки в этот заголовочный файл, чтобы я мог определить структуру, которая может быть использована в других файлах проекта.Почему включение файлов заголовков freetype в моем файле заголовка C приводит к ошибке, но может быть включено в файл .c?
#ifndef H_ENGINE_TEXT
#define H_ENGINE_TEXT
#include <ft2build.h>
#include FT_FREETYPE_H
typedef struct
EngineFont
{
FT_Library Library;
FT_Face Face;
} EngineFont;
void
LoadFont(char* FontPath);
#endif
Однако при попытке скомпилировать это, я получаю следующие ошибки из Visual Studio cl.exe компилятора:
engine_main.c
h:\Engine\code\freetype/freetype.h(947): error C2208: 'FT_Face_InternalRec_ *': no members defined using this type
h:\Engine\code\freetype/freetype.h(1317): error C2208: 'FT_Size_InternalRec_ *': no members defined using this type
h:\Engine\code\freetype/freetype.h(1549): error C2208: 'FT_Slot_InternalRec_ *': no members defined using this type
Обратите внимание, что ошибка происходит из engine_main.c, потому что это в том числе заголовочный файл engine_text.h. Теперь по какой-либо причине, если я помещаю FreeType в файл engine_text.c, а не в заголовок, программа компилируется и запускается без проблем. Но, конечно, тогда я не могу определить структуру, которая мне необходима.
engine_main.c выглядит следующим образом:
#include "engine_main.h"
#include <SDL/SDL.h>
#include <GL/glew.h>
#include "engine_sdl.h"
#include "engine_shader.h"
// The problematic one:
#include "engine_text.h"
Почему, когда включает сделаны в другом файле заголовка он вызывает так много проблем? Я также не очень уверен, что на самом деле указывает на ошибку C2208.
можете ли вы предоставить 'engine_main.c' в варианте, где он компилируется? –
Я добавил engine_main.c выше. @StephanLechner – utterfool
Это версия, которая не работает, не так ли? Как выглядит 'engine_main.c' в варианте, где он работает? –