OpenGL с Qt5: #error gl.h включен перед glew.h

У меня есть проект на 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 всегда первый.


person Littlebitter    schedule 18.03.2013    source источник
comment
Вы включили что-то еще, включая gl.h? Возможно, как заголовки Qt? GLEW должен быть включен перед любым из них.   -  person Nicol Bolas    schedule 18.03.2013
comment
@NicolBolas нет, #include GL/glew.h всегда первый   -  person Littlebitter    schedule 18.03.2013
comment
может быть, предварительно скомпилированные заголовки?   -  person dowhilefor    schedule 18.03.2013
comment
@dowhilefor не используются   -  person Littlebitter    schedule 18.03.2013
comment
Проверьте также свой cpps, прочитайте комментарии к этот ответ, может быть, что помогает.   -  person dowhilefor    schedule 18.03.2013
comment
Файлы @dowhilefor всегда включаются только три в указанном порядке и в первой строке файла. Он хорошо работает с Qt4.8, поэтому в Qt5 должно быть что-то изменено.   -  person Littlebitter    schedule 18.03.2013
comment
@Littlebitter: Но, по вашему собственному признанию, вы еще ничего не включили из Qt, так что это не может ни на что повлиять.   -  person Nicol Bolas    schedule 18.03.2013
comment
@NicolBolas, но заголовок, который включает GL, включен в другие файлы, и эти файлы включены в другие файлы. Я думаю, что некоторые заголовки Qt, которые не включали его, теперь включают gl.h   -  person Littlebitter    schedule 18.03.2013
comment
@Littlebitter: Когда вас спросят, включили ли вы что-нибудь перед заголовком GLEW, что может включать gl.h, вы нет, #include GL/glew.h всегда будет первым. Вы действительно имели в виду первый или просто первый среди материалов OpenGL? Потому что последнее не то, что я спросил.   -  person Nicol Bolas    schedule 18.03.2013
comment
@NicolBolas в файлах, куда они включены, они первые. Но они входят в несколько заголовков, и эти заголовки входят в другие заголовки, и они в другие. Проект очень большой.   -  person Littlebitter    schedule 18.03.2013


Ответы (2)


Не имеет значения, включен ли заголовок первым в какой-либо файл .h. Заголовочные файлы не являются автономными. Что имеет значение, так это порядок, в котором они видны из исходного файла.

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

person Nicol Bolas    schedule 18.03.2013
comment
Это слишком плохо, чтобы быть выбранным в качестве лучшего ответа - person ; 23.05.2013

Предположим, вы используете только вызовы 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 и все такое.

person Darkgaze    schedule 16.04.2014