下面是一个engine_text.h文件,我试图在其中包含FreeType库。我想在此头文件中包含库,以便我可以定义可在其他项目文件中使用的结构。
#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:Enginecodefreetype/freetype.h(947): error C2208: 'FT_Face_InternalRec_ *': no members defined using this type
h:Enginecodefreetype/freetype.h(1317): error C2208: 'FT_Size_InternalRec_ *': no members defined using this type
h:Enginecodefreetype/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 错误真正向我表明了什么。
我认为类型FT_Library和FT_Face的行为不符合预期;但是通过将其打包到struct
中,C2208-thing可能会涵盖"真正的"问题,它只是表明您定义了一个没有成员的结构(我认为具有误导性)。
只是为了找出问题,请尝试以下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;
看看这些声明是否有效。然后让我们继续下一步。