# ошибка gl.h включена до glew.h - PullRequest
8 голосов
/ 20 декабря 2011

Итак, я пытаюсь переместить мой код OpenGL из Main () в определенный класс, который будет обрабатывать трехмерную графику только при необходимости.Ранее верхняя часть моего файла 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, пытаясь убедиться, что ничего не включает SFML до GLEW.

#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>

К сожалению, это не помогает (нет ничегокроме того, что я здесь не упоминаю).

Ответы [ 2 ]

14 голосов
/ 20 декабря 2011

В некоторых других библиотеках есть gl.h. Мое предположение было бы SFML. Убедитесь, что вы сначала включили GLEW в Game.h, и проверьте, где вы включаете Game.h, чтобы убедиться, что вы не включаете SFML или что-то еще, что включает gl.h до Game.h.

Если у вас есть что-то вроде:

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

Эффективно включает gl.h перед GLEW.

1 голос
/ 20 декабря 2011

Думаю, у меня тоже была однажды эта проблема.Это как-то связано с тем, что SFML (1.6?) Включает в себя материал OpenGL.

IIRC (прошло некоторое время, и я больше не нуждаюсь в GLEW с момента перехода на SFML2), это связано с GraphicsML от SFML, включая GLEW.ч тоже.Не должно происходить из-за включения охраны, но я думаю, что с некоторыми версиями это все еще может произойти.Возможно, вы сможете полностью пропустить заголовок GLEW, так как он все равно включен в SFML.

Какую версию SFML вы используете?1.6, 2.0 или 2.0 с новым API?Кроме того, в чем причина использования GLEW?Что-то вам не хватает в SFML?Может быть, это что-то включено в последнюю версию, так что вам не придется включать это тоже.

...