我在 Qt4.8 上有项目,并试图用 Qt5.1 构建它。我收到很多
#error gl.h included before glew.h
和
#error glext.h included before glew.h
错误。似乎 Qt5 与 OpenGL 发生了很大变化。所有包括
#include "GL/glew.h"
#include "GL/gl.h"
#include "GL/glu.h"
glew.h 总是第一个。
假设您只在使用需要使用 GLEW 加载的函数的类中使用 OPENGL 调用,那么这将起作用。
我解决这个问题的方法是将所有 GLEW h 包含在 .CPP 文件中,但在包含头文件之前(其中 QTGUI 又包含 OPENGL)。
所以这就是我在 GLWIDGET.CPP 中的方式:
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GLWidget.h>
如您所见,我的 GLWidget 是来自 QGLWidget 的派生类,它需要包含 QTGUI 和所有这些。
标头是否首先包含在某些 .h 文件中并不重要。头文件不是独立的。重要的是从源文件中看到包含的顺序。
您似乎有太多的标题包含(一般来说,您应该将标题到标题的包含保持在绝对最低限度)。我们无法解决这个问题。你只需要解开你的标题问题。