以下は、FreeTypeライブラリをインクルードしようとしているengine_text.hファイルです。このヘッダファイルにライブラリを含めて、他のプロジェクトファイルで使用できる構造体を定義できるようにします。Cヘッダーファイルにfreetypeヘッダーファイルを含めると、エラーが発生しますが、.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から来ていることを
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_text.hヘッダーファイル何らかの理由で、ヘッダーではなくengine_text.cファイルにFreeTypeインクルードを置くと、プログラムは問題なくコンパイルされ実行されます。もちろん、構造体を定義することはできません。これは私が行うために必要です。
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エラーが実際に私に示していることもよく分かりません。
コンパイルされた場所に 'engine_main.c'を指定してください。 –
上記のengine_main.cを追加しました。 @StephanLechner – utterfool
これはうまくいきません。 'engine_main.c'は動作するバリアントでどのように見えますか? –