2013-03-18 4 views
3

У меня есть проект на Qt4.8 и попытка его построить с Qt5.1. Я получаю многоOpenGL с Qt5: #error gl.h включен до glew.h

#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 всегда первым.

+0

Включили ли вы что-то еще, что включает в себя 'gl.h'? Может быть, как заголовки Qt? GLEW следует включать перед любым из них. –

+0

@NicolBolas no, #include "GL/glew.h" всегда является первым – Littlebitter

+0

прекомпилированными заголовками, может быть? – dowhilefor

ответ

-1

Не имеет значения, включен ли заголовок сначала в некоторый файл .h. Файлы заголовков не являются отдельными. Важно то, что порядок, который включает, рассматривается из исходного файла.

У вас, похоже, слишком много включений заголовков (вообще говоря, вы должны включать включения заголовка в заголовок до абсолютного минимума). На этом мы ничего не можем сделать, чтобы исправить это; вам просто нужно распутать свои проблемы с заголовком.

+5

Это слишком плохо, чтобы быть выбранным как лучший ответ – 2013-05-23 04:44:13

1

Допустим, вы используете только вызовы OPENGL в классе, где вы используете функции, которые необходимо загрузить с помощью GLEW, тогда это сработает.

Что я сделал, чтобы исправить это, включить все 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 и все это.