2017-01-26 10 views
0

Ниже приведен файл 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.

+0

можете ли вы предоставить 'engine_main.c' в варианте, где он компилируется? –

+0

Я добавил engine_main.c выше. @StephanLechner – utterfool

+0

Это версия, которая не работает, не так ли? Как выглядит 'engine_main.c' в варианте, где он работает? –

ответ

0

Я полагаю, что типы FT_Library и FT_Face не ведут себя так, как предполагалось; но, упаковывая его в struct, «реальная» проблема может быть покрыта C2208-вещью, которая просто указывает, что вы определяете структуру без членов (как мне кажется, вводя в заблуждение).

Только для выяснения вещи, попробуйте следующее engine_main.c:

#include "engine_main.h" 

#include <SDL/SDL.h> 
#include <GL/glew.h> 

#include "engine_sdl.h" 
#include "engine_shader.h" 

#include <ft2build.h> 
#include FT_FREETYPE_H 

FT_Library Library; 
FT_Face Face; 

и посмотреть, если эти заявления работают. Затем переходим к следующим шагам.

+0

Я получаю ту же ошибку C2208, когда я изменил engine_main.c на этот вариант. – utterfool

+0

И вы удалили свою конструкцию EngineFont? –

+0

Это правильно. – utterfool