Tak więc próbuję przenieść mój kod OpenGL z Main() do konkretnej klasy, która będzie obsługiwać grafikę 3D tylko wtedy, gdy będzie to konieczne. Poprzednio górna część pliku main.cpp wyglądała następująco:#error gl.h zawarty przed glew.h
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
To działało dobrze. Próbowałem przenieść cały kod związany z OpenGL do metod klasy Game
. Więc usunąłem #define GLEW_STATIC
i #include <GL/glew.h>
z powyższego, i umieścić je w Game.h tak, że górna część Game.h teraz wygląda tak:
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Environment.h"
Kiedy próbuję skompilować, pojawia się błąd w tytule, #error gl.h included before glew.h
.
Dlaczego tak się dzieje i jak mogę użyć kodu OpenGL (prawie) całkowicie wewnątrz funkcji konkretnej klasy bez tego zdarzenia?
EDIT:
Próbowałem również tę konfigurację w main.cpp, starając się upewnić, że nic nie obejmuje SFML przed GLEW.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>
Niestety, to nie pomaga (nie ma w tym nic więcej, o czym nie wspomnę tutaj).
Czy to oznacza, że teraz # wliczasz glew.h dwa razy, raz z main.cpp i raz z game.h? Przypuszczam, że glew.h nie został napisany w tym celu (ani żaden strażnik, ani #pragma), więc musisz dodać własnych strażników lub zadbać o to, aby uwzględnić go dokładnie raz. – Rup
@Rup GLEW ma #include guards. To jest jakaś inna biblioteka, która zawiera gl.h. Prawdopodobnie SFML. –
Nie, usuwam go z main.cpp. Przypuszczam, że może to być SFML, ale miałem wrażenie, że nie zawiera ono automatycznie gl.h, ponieważ istnieją tam pewne tutoriale, które wymagają jawnego włączenia tego pliku. Poruszę się z tym i zobaczę, czy to rozwiązuje cokolwiek - ale nadal potrzebuję używać SFML w main.cpp, przynajmniej przy mojej obecnej konfiguracji. – GarrickW