15

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

#include <gl/gl.h>

在 Camera.hi 中出现了很多类似这样的错误:
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

主.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 ...
}

我究竟做错了什么?

4

2 回答 2

26

只需先包含 windows.h 即可。

#include <windows.h>

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

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


资源 :

于 2010-09-21T13:52:40.780 回答
1

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

在 Camera.h 中写

#ifndef _CAMERA_H
#define _CAMERA_H

高于所有其他包括。并将 .cpp 文件所需的所有头文件包含在 .h 文件中。

至少那是我认为的最佳实践。

于 2010-09-21T13:56:32.977 回答