15 Stimmen

Kann <gl/gl.h> nicht einschließen

Ich verwende Visual Studio 2010. Ich versuche, einfache Kamera-Klasse in OpenGL zu schreiben. Ich muss gl/gl.h in Camera.h einschließen
gl/gl.h ist bereits in main.cpp enthalten und Camera.h ist in main.cpp enthalten Wenn ich

#include <gl/gl.h>

in Camera.h habe ich eine Reihe von Fehlern wie diesen:
Error 11 error C2086: 'int APIENTRY' : redefinition C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gl\GL.h 1153 1 Gaz 3D

Dateien:
Kamera.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 ...
}

Was mache ich falsch?

26voto

Colin Hebert Punkte 88407

Führen Sie einfach zuerst ein Include von Windows.h durch.

#include <windows.h>

Wie es in der OpenGL-FAQ steht:

Beachten Sie auch, dass Sie eine #include <windows.h> Anweisung vor der #include<GL/gl.h> . Microsoft verlangt, dass System-DLLs eine bestimmte Aufrufkonvention verwenden, die nicht die Standard-Aufrufkonvention für die meisten Win32-C-Compiler ist, also haben sie die OpenGL-Aufrufe in gl.h mit einigen Makros versehen, die sich zu einer nicht standardmäßigen C-Syntax erweitern. Dies veranlasst Microsofts C-Compiler, die Systemaufrufkonvention zu verwenden. Eine der in Windows.h enthaltenen Include-Dateien definiert die Makros.


Ressourcen :

1voto

fancyPants Punkte 49011

Edit: Offensichtlich hat Colin Hebert das Problem gelöst, aber als generellen Tipp möchte ich noch anmerken:

In Camera.h schreiben

#ifndef _CAMERA_H
#define _CAMERA_H

über alle anderen umfasst. Und schließen Sie alle Header-Dateien, die Sie in Ihrer .cpp-Datei benötigen, in Ihre .h-Datei ein.

Zumindest halte ich das für die beste Praxis.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X