不能包含<gl gl.h =“”> </gl>

时间:2010-09-21 13:48:28

标签: opengl include redefinition

我正在使用Visual Studio 2010。 我正在尝试在OpenGL中编写简单的Camera类。 我需要在Camera.h中包含gl / gl.h gl / gl.h已包含在main.cpp中,Camera.h包含在main.cpp中 当我把

#include <gl/gl.h>
在Camera.h中,我遇到了一堆像这样的错误:
Error 11 error C2086: 'int APIENTRY' : redefinition C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gl\GL.h 1153 1 Gaz 3D

文件:
Camera.h

#include <math.h>
#include <gl/gl.h>

#ifndef _CAMERA_H
#define _CAMERA_H

class Camera
{
private:
    Camera();
public:
    static Camera& getCamera();
    float x, y, z, rotv, roth;
    void moveForward(float n);
    void moveBackward(float n);
    void moveLeft(float n);
    void moveRight(float n);
    void lookUp(float n);
    void lookDown(float n);
    void lookLeft(float n);
    void lookRight(float n);
};

#endif

main.cpp中:

#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#include <math.h>
#include "Camera.h"

// ... some variables ...

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,  
                   LPSTR lpCmdLine, int nCmdShow)
{
    // main code ...
}

我做错了什么?

2 个答案:

答案 0 :(得分:23)

首先要包含windows.h。

#include <windows.h>

正如在OpenGL常见问题解答中所说:

  

另请注意,您需要在#include <windows.h>之前添加#include<GL/gl.h>语句。 Microsoft要求系统DLL使用特定的调用约定,该约定不是大多数Win32 C编译器的默认调用约定,因此他们使用扩展为非标准C语法的一些宏来注释gl.h中的OpenGL调用。这导致Microsoft的C编译器使用系统调用约定。 windows.h中包含的一个包含文件定义了宏。


资源:

答案 1 :(得分:1)

编辑:显然科林赫伯特解决了这个问题,但作为一般性提示,我想说:

在Camera.h中写

#ifndef _CAMERA_H
#define _CAMERA_H
所有其他包括

以上。 并在.h文件中包含.cpp文件中所需的所有头文件。

至少我认为这是最佳做法。