1

我目前正在为游戏开发课程做一个最终的编程项目,并选择在程序的 3D 渲染端使用 C++ 和 OpenGL(尽管我对此几乎没有经验)。

到目前为止,我一直在使用它,完全没问题,没有出现严重错误,然后放了几天。但是当我返回时,我开始使用我使用的几个 GLfloat 变量得到各种“C4430 - 缺少类型说明符”错误。

这是我以前的定义,在我今天重新加载之前效果很好:

    #include <gl/glew.h>
    #include <gl/glut.h>

    ... Other variable and object definitions

    const GLfloat DEFAULT_X = -5.0f;  //C4430: missing type specifyer on all 3 lines and
    const Glfloat DEFAULT_Y = -4.0f;  //C2146: syntax error : missing ';' before identifier 'DEFAULT_Y' on this line only
    const GLfloat DEFAULT_Z = -20.0f;

    GLfloat viewX = DEFAULT_X; //This line is fine
    GLfloat viewY = DEFALUT_Y; //Resulting C2065: Undeclared identifyer
    GLfloat viewZ = DEFALUT_Z; //on both these lines

为了解决这个问题,我开始改变#includes(也许是一种愚蠢的方法,但此时我很困惑)并发现添加Windows.h和gl/GL.h,正如一些人所建议的那样,除了问题之一。

    #include <Windows.h>
    #include <gl/GL.h>
    #include <gl/glew.h>
    #include <gl/glut.h>

新问题是尝试在 gl/glew.h 之前使用 gl/GL.h 会引发错误“C1189:glew.h 之前包含 gl.h”,因为猜测,glew 包含 gl.h 本身。但是任何更改都会带回以前的类型指定器错误。

令我困惑的是,如果 glew 包含 GL.h,那么这些类型说明符是否也包含在内?我将继续在没有测试的情况下继续进行方法编码,但需要能够尽快测试我正在做的事情。任何人都可以提供帮助或建议吗?

4

1 回答 1

2
#include <Windows.h>
#include <gl/GL.h>
#include <gl/glut.h>
#include <gl/glew.h>

这是包含这些标题的错误顺序。

GLEW(或您正在使用的任何 OpenGL 加载程序)始终排在第一位。您永远不会包含gl.hOpenGL 加载程序头文件;你只包括他们的(glew.h在这种情况下)。它位于 OpenGL 或 OpenGL 工具的所有其他标头之前。

接下来是 FreeGLUT 的标头。在那之后......你根本不应该包括在内window.h,除非你正在做一些特定于 Windows 的代码。如果你是,你把它包含在 FreeGLUT 的东西之后。

于 2013-03-01T20:50:23.137 回答