【发布时间】:2012-01-24 17:24:10
【问题描述】:
所以我试图将我的 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>
不幸的是,这并没有帮助(这里没有我没有提到的其他内容)。
【问题讨论】:
-
这是否意味着您现在 #include glew.h 两次,一次来自 main.cpp,一次来自 game.h?我猜 glew.h 不是为此而写的(没有守卫或#pragma),所以你要么必须添加自己的守卫,要么注意只包含一次。
-
@Rup GLEW 有 #include 保护。这是其他一些包含 gl.h 的库。可能是 SFML。
-
不,我从 main.cpp 中删除它。我想它可能是 SFML,但我的印象是它不会自动包含 gl.h,因为那里有一些教程希望您明确包含该文件。我会解决这个问题,看看是否能解决任何问题 - 但我仍然需要在 main.cpp 中使用 SFML,至少在我当前的设置中是这样。
-
我刚刚在
之前尝试了#include "Game.h",这样在 Game.h 之前就不会出现任何与 SFML 相关的内容,但我仍然遇到同样的错误。跨度> -
您可以将
#error included here添加到gl.h 的顶部。这应该会给您一个错误,其中包含包含来自何处的完整详细信息。
标签: c++ opengl include codeblocks sfml