#error gl.h包含在gl.h之前
#error gl.h included before glew.h
所以我试图将我的OpenGL代码从Main()移动到一个特定的类中,仅在必要时处理3D图形。之前,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中尝试了这个配置,试图确保在GLEW之前没有包含SFML。
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "Game.h"
#include <SFML/Graphics.hpp>
不幸的是,这没有帮助(我没有在这里提到的其他内容)。
其他一些库包含了gl.h。我猜是SFML。确保首先在Game.h中包含GLEW,并检查包含Game.h的位置,以确保没有包含SFML或其他在Game.h之前包含gl.h的内容。
如果你有这样的东西:
#include <something_that_includes_gl.h>
#include "Game.h"
它将有效地在GLEW之前包含gl.h。
我想我也曾经遇到过这个问题。这在某种程度上是由SFML(1.6?)包含OpenGL的方式引起的。
IIRC(已经有一段时间了,自从切换到SFML2以来,我不再需要GLEW了),这是由于SFML的Graphics.hpp也包括GLEW.h。由于包含守卫,不应该发生这种情况,但我认为某些版本可能仍然会发生这种情况。您可以完全跳过GLEW的头文件,因为它是通过SFML包含的。
您运行的是哪个版本的SFML ?1.6、2.0还是带有新API的2.0 ?另外,使用GLEW的原因是什么?SFML中缺少了什么?也许它已经包含在最新版本中了,所以你不必把它也包含进去。
- 如何确保C++函数在定义之前声明(如override关键字)
- 为什么在定义函数之前先声明它
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 程序在执行程序的其余部分之前退出
- 如何将模板转换为C++11之前的模板
- '||'之前的预期主要表达
- (C++)为什么静态成员可以在初始化之前使用
- 标记 '","' 之前的预期主表达式
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 错误:在"生成字符串"之前应为";"
- 为什么C++常量模板化向量在使用之前没有初始化?
- 类的前向声明之后的类成员函数定义,在类声明之前
- 'val' Arduino 错误代码之前的预期'('
- unique_ptr:在分配之前调用 reset 有什么效果
- 语句错误:"","标记之前有"预期的')'
- GL.H 包括在 Glenw.H. 之前
- C++ OpenGL:在 glew.h 之前包含错误 gl.h
- #error gl.h包含在gl.h之前
- OpenGL与Qt5: #error gl.h包含在glew.h之前