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

时间:2017-01-26 18:24:58

标签: c visual-studio visual-c++ compiler-errors compilation

下面是一个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错误对我的影响是什么。

1 个答案:

答案 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;

并查看这些声明是否有效。然后让我们进行下一步。