15

Visual Studio 2010 を使用しています。OpenGL で単純な Camera クラスを作成しようとしています。gl/gl.h を Camera.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

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

私は何を間違っていますか?

4

2 に答える 2

26

最初に windows.h をインクルードするだけです。

#include <windows.h>

OpenGL FAQ で述べられているように:

#include <windows.h>また、 .の前にステートメントを配置する必要があることに注意してください#include<GL/gl.h>。Microsoft は、ほとんどの Win32 C コンパイラの既定の呼び出し規則ではない特定の呼び出し規則を使用するようにシステム DLL を要求しています。これにより、Microsoft の C コンパイラはシステム呼び出し規約を使用します。windows.h に含まれるインクルード ファイルの 1 つは、マクロを定義します。


資力 :

于 2010-09-21T13:52:40.780 に答える
1

編集: 明らかに、Colin Hebert が問題を解決しましたが、一般的なヒントとして、次のように言いたいと思います。

Camera.h に書き込みます

#ifndef _CAMERA_H
#define _CAMERA_H

何よりも他のものが含まれます。そして、.cpp ファイルに必要なすべてのヘッダー ファイルを .h ファイルに含めます。

少なくともそれがベストプラクティスだと思います。

于 2010-09-21T13:56:32.977 に答える