1. ホーム
  2. c++

[解決済み] #error gl.h は glew.h の前に含まれています。

2022-02-28 01:50:18

質問

そこで私は、OpenGLのコードをMain()から、必要なときだけ3Dグラフィックスを処理する特定のクラスに移動させようとしているのです。 以前は、私のmain.cppファイルのトップは、次のようになりました。

#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"

これは十分うまくいきました。 私が行おうとしたのは、OpenGLに関連するコードをすべて Game クラスがあります。 そこで、私は #define GLEW_STATIC#include <GL/glew.h> をGame.hに書き込むと、Game.hの先頭は次のようになります。

#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Environment.h"

コンパイルしようとすると、タイトルエラーが表示されます。 #error gl.h included before glew.h .

なぜこのようなことが起こるのでしょうか。また、このようなことが起こらずに、特定のクラスの関数の中で(ほとんど)完全にOpenGLのコードを使用するにはどうしたらよいでしょうか。

EDIT

また、GLEWの前にSFMLが含まれないようにするため、main.cppでこの設定を試しました。

#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>

残念ながら、それは役に立ちません(ここに書いていないことで、他に含まれているものはないのです)。

解決方法は?

他のライブラリがgl.hをインクルードしている。私の推測では、SFMLだと思います。Game.hでGLEWを最初にインクルードしていることを確認し、Game.hをインクルードしている場所をチェックして、SFMLや他の何かがGame.hの前にgl.hをインクルードしないことを確認します。

みたいなのがあれば

#include <something_that_includes_gl.h>
#include "Game.h"

GLEWの前にgl.hを効果的にインクルードすることになります。