#error gl.h包含在gl.h之前

#error gl.h included before glew.h

本文关键字:gl 之前 包含 #error      更新时间:2023-10-16

所以我试图将我的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代码(几乎)完全在一个特定的类的功能内没有发生这种情况?

编辑:

我也在main.cpp中尝试了这个配置,试图确保在GLEW之前没有包含SFML。

#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。

我想我也曾经遇到过这个问题。这在某种程度上是由SFML(1.6?)包含OpenGL的方式引起的。

IIRC(已经有一段时间了,自从切换到SFML2以来,我不再需要GLEW了),这是由于SFML的Graphics.hpp也包括GLEW.h。由于包含守卫,不应该发生这种情况,但我认为某些版本可能仍然会发生这种情况。您可以完全跳过GLEW的头文件,因为它是通过SFML包含的。

您运行的是哪个版本的SFML ?1.6、2.0还是带有新API的2.0 ?另外,使用GLEW的原因是什么?SFML中缺少了什么?也许它已经包含在最新版本中了,所以你不必把它也包含进去。