下面是一个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:\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 :(得分: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;
并查看这些声明是否有效。然后让我们进行下一步。