#Fehler gl.h enthalten, bevor glew.h
So, ich versuche mich zu bewegen, meine OpenGL-code von Main() in eine bestimmte Klasse, die sich um die 3D-Grafik nur bei Bedarf. Zuvor, die Spitze von meiner main.cpp Datei sah so aus:
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
Dies funktionierte gut genug. Was ich versucht habe zu tun war, verschieben Sie alle OpenGL-relevanten code in Methoden der Game
Klasse. So entfernte ich #define GLEW_STATIC
und #include <GL/glew.h>
von oben, und setzen Sie Sie in das Spiel.h, so dass die Spitze des Spiels.h sieht nun wie folgt aus:
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Environment.h"
Wenn ich versuche zu kompilieren, bekomme ich die Titel Fehler #error gl.h included before glew.h
.
Warum ist das passiert und wie kann ich das OpenGL-code (fast) vollständig innerhalb der Funktionen einer bestimmten Klasse an, ohne dass dies passiert?
EDIT:
Habe ich auch versucht diese Konfiguration in main.cpp in einem Versuch, um sicherzustellen, dass nichts enthält SFML vor GLEW.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>
Leider nicht helfen (es ist nichts anderes enthalten, das bin ich nicht, hier zu erwähnen).
- Heißt das, du bist jetzt #inklusive glew.h zweimal an, einmal aus main.cpp und einmal aus dem Spiel.h? Ich denke, glew.h ist nicht geschrieben für die, die (entweder keine Wachen oder #pragma), so werden Sie entweder, um Ihre eigenen Wachen oder darauf achten, es genau einmal.
- GLEW hat die #include-guards. Es ist eine andere Bibliothek, die einschließlich von gl.h. Vielleicht SFML.
- Nein, ich entfernen Sie Sie aus main.cpp. Ich nehme an es könnte sein, SFML, aber ich hatte den Eindruck, dass es nicht automatisch gl.h, da gibt es einige Anleitungen für Sie, die wollen, dass du explizit die Datei. Ich werde hantieren mit, und sehen, ob das löst alles - aber ich muss noch SFML verwenden in main.cpp zumindest mit meinem aktuellen setup.
- Ich habe gerade versucht #inklusive " - Spiel.h" vor <SFML/Graphics.hpp>, so dass nichts SFML-Verwandte kommen würden, bevor das Spiel.h, aber ich bekomme immer noch den gleichen Fehler.
- Man könnte hinzufügen
#error included here
an die Spitze der gl.h. Das sollte Ihnen ein Fehler sich mit den Einzelheiten von wo die Aufnahme stammt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andere Bibliotheken, darunter gl.h. Meine Vermutung wäre die SFML. Stellen Sie sicher, dass Sie GLEW erste im Spiel.h und überprüfen Sie die Orte, an denen Sie gehören-Spiel.h-um sicherzustellen, dass Sie nicht wie SFML oder etwas anderes, enthält gl.h vor dem Spiel.h.
Wenn Sie so etwas wie:
Wird es effektiv enthalten gl.h vor GLEW.
#include "Game.h"
oben#include <SFML/Graphics.hpp>
innerhalb main.cpp (ich werde Bearbeiten Sie die main-post zu zeigen), aber das machte keinen Unterschied. Ich bin nicht vertraut mit der Art, wie #auch Dinge funktioniert, so könnte es etwas sein, was ich bin fehlt.<SFML/Graphics.hpp>
oben " - Spiel.h". Ich wusste nicht, das .cpp-Dateien für Klassen kompiliert wurden, bevor die Header für die gleiche Klasse, obwohl jetzt, dass ich an Sie denke... ich habe eine Menge zu lernen. Danke!Ich glaube, ich hatte dieses Problem auch einmal. Es ist irgendwie die Art und Weise zurückzuführen SFML (1.6?) enthält die OpenGL-Sachen.
IIRC (schon einige Zeit und ich brauche nicht GLEW mehr seit der Umstellung auf SFML2) es ist aufgrund der SFML Grafiken.hpp einschließlich GLEW.h, zu. Sollte nicht passieren, wegen des include-guards, aber ich denke mit einigen Versionen das könnte noch passieren. Es könnte möglich sein, für Sie zu überspringen GLEW header vollständig, wie es durch SFML sowieso.
Welche version von SFML sind Sie? 1.6, 2.0 oder 2.0 mit der neuen API? Auch, was ist der Grund für die Verwendung von GLEW? Etwas, das Ihnen fehlt von SFML? Vielleicht ist es etwas enthalten in der neuesten version, also hält Sie davon ab, Sie gehören zu.