erreur #gl.h inclus avant glew.h
Donc je suis en train de passer mon code OpenGL main() dans une classe qui va gérer les graphismes en 3D uniquement lorsque c'est nécessaire. Auparavant, le dessus de mon main.cpp fichier ressemble à ceci:
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
Cela a fonctionné assez bien. Ce que j'ai essayé de faire était de déplacer toutes les OpenGL-code dans les méthodes de la Game
classe. J'ai donc enlevé #define GLEW_STATIC
et #include <GL/glew.h>
à partir de ci-dessus, et de les mettre en Jeu.h, de telle sorte que le haut de Jeu.h ressemble maintenant à ceci:
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Environment.h"
Lorsque j'essaie de compiler, j'obtiens le titre de l'erreur, #error gl.h included before glew.h
.
Pourquoi est-ce qui se passe, et comment puis-je utiliser le code OpenGL (presque) entièrement à l'intérieur des fonctions d'une classe spécifique, sans que cela se produise?
EDIT:
J'ai aussi essayé cette configuration dans main.cpp, dans une tentative de s'assurer que rien n'inclut SFML avant de GLEW.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>
Malheureusement, cela ne fonctionne pas (il n'y a rien d'autre ne soit compris que je ne suis pas de mentionner ici).
GLEW a #include gardes. C'est une autre bibliothèque qui est, y compris le gl.h. Éventuellement SFML.
Non, je le supprime de main.cpp. Je suppose que cela pourrait être la SFML, mais j'étais sous l'impression qu'il n'a pas les inclure automatiquement gl.h, car il existe des tutoriels pour ça que voulez-vous d'inclure explicitement fichier. Je vais jouer avec ça et voir si cela résout rien, mais j'ai encore besoin d'utiliser la SFML dans main.cpp au moins avec mon setup actuel.
J'ai juste essayé #, y compris "le Jeu.h" avant <SFML/Graphics.hpp>, telle que rien ne SFML liés à la avant Jeu.h, mais j'obtiens toujours la même erreur.
Vous pourriez ajouter
#error included here
vers le haut de gl.h. Cela devrait vous donner une erreur avec tous les détails de l'endroit où l'inclusion est venu.OriginalL'auteur GarrickW | 2011-12-20
Vous devez vous connecter pour publier un commentaire.
Une autre bibliothèque est, y compris le gl.h. J'imagine la SFML. Assurez-vous d'inclure GLEW d'abord dans le Jeu.h et de vérifier les endroits où vous incluez le Jeu.h à assurez-vous que vous n'êtes pas notamment SFML ou quelque chose d'autre qui comprend gl.h avant le Jeu.h.
Si vous avez quelque chose comme:
Il va intégrer efficacement les gl.h avant de GLEW.
#include "Game.h"
jusqu'au-dessus de#include <SFML/Graphics.hpp>
dans main.cpp (je vais éditer le post pour le démontrer), mais qui ne fait pas de différence. Je ne suis pas intimement familier avec la façon #y compris les choses les œuvres, alors il pourrait y avoir quelque chose qui m'échappe.C'est peut-être quelques autres en-tête? Pouvez-vous vérifier le "Build log" dans l'onglet Code::Blocks et après les messages qui ressemblent à des "Dans le fichier inclus à partir de ..."? Qui peut l'aider à trouver le coupable.
AH-HA! J'ai trouvé, il s'avère que le problème était dans Game.cpp. Là, j'ai eu pour une raison quelconque inclus
<SFML/Graphics.hpp>
jusqu'au-dessus "du Jeu.h". Je ne connaissais pas le .fichiers cpp pour les classes ont été compilées avant les en-têtes de la même classe, même si maintenant que j'y pense... j'ai beaucoup à apprendre. Merci!c'est toujours une bonne idée d'inclure X. php première dans l'X.cpp. En plus de ne pas le déclenchement de ce problème ennuyeux, il a également fait en sorte que votre .php comprend tout ce dont il a besoin pour travailler.
un #include est remplacé par le contenu du fichier inclus, donc les fichiers d'en-tête sont compilés avec tous les fichiers qui les inclut.
OriginalL'auteur R. Martinho Fernandes
Je pense que j'ai eu ce problème une fois, trop. C'est en quelque sorte liée à la façon de la SFML (1.6?) comprend l'OpenGL choses.
IIRC (été un certain temps et je n'ai pas besoin GLEW plus depuis le passage à SFML2) c'est en raison de la SFML Graphiques.php, y compris GLEW.h, trop. Ne devrait pas se produire en raison d'inclure des gardiens, mais je pense qu'avec certaines versions de ce qui pourrait encore arriver. Il pourrait être possible pour vous de sauter GLEW de l'en-tête complètement, car il est inclus par le biais de la SFML, de toute façon.
La version de SFML êtes-vous en cours d'exécution? 1.6, 2.0 ou la 2.0 avec la nouvelle API? Aussi, quelle est la raison de l'utilisation de GLEW? Quelque chose que vous êtes absent de la SFML? C'est peut-être quelque chose inclus dans la dernière version, donc vous évite de devoir l'inclure trop.
OriginalL'auteur Mario