为什么在我的 C 头文件中包含 freetype 头文件会产生错误,但可以包含在 .c 文件中



下面是一个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;

看看这些声明是否有效。然后让我们继续下一步。

最新更新