#leror gl.h包含在glew.h之前

时间:2011-12-20 19:11:19

标签: c++ opengl include codeblocks sfml

所以我试图将我的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>

不幸的是,这没有任何帮助(我没有在此提及其他任何内容)。

2 个答案:

答案 0 :(得分:14)

其他一些库包括gl.h.我的猜测是SFML。确保在Game.h中首先包含GLEW并检查包含Game.h的位置,以确保在Game.h之前不包括SFML或包含gl.h的其他内容。

如果你有类似的话:

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

它将在GLEW之前有效地包含gl.h。

答案 1 :(得分:1)

我想我也有过一次这个问题。这是由SFML(1.6?)包含OpenGL内容的方式引起的。

IIRC(已经有一段时间了,自从切换到SFML2后我不再需要GLEW)这也是由于SFML的Graphics.hpp,包括GLEW.h。不应该因为包括警卫而发生,但我认为在某些版本中这可能仍然会发生。您可能完全跳过GLEW的标题,因为它无论如何都包含在SFML中。

您运行的是哪个版本的SFML?使用新API的1.6,2.0或2.0?另外,使用GLEW的原因是什么?你在SFML中缺少什么?也许这是最新版本中包含的内容,因此您也不必包含它。