Не могу включить <gl / gl.h> - PullRequest
       13

Не могу включить <gl / gl.h>

14 голосов
/ 21 сентября 2010

Я использую Visual Studio 2010. Я пытаюсь написать простой класс камеры в OpenGL. Мне нужно включить gl / gl.h в Camera.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 ]

23 голосов
/ 21 сентября 2010

Просто сначала включите windows.h.

#include <windows.h>

Как сказано в FAQ по OpenGL:

Также обратите внимание, что вам нужно поставить оператор #include <windows.h> перед #include<GL/gl.h>. Microsoft требует, чтобы системные DLL использовали специальное соглашение о вызовах, которое не является соглашением о вызовах по умолчанию для большинства компиляторов Win32 C, поэтому они аннотировали вызовы OpenGL в gl.h некоторыми макросами, которые расширяются до нестандартного синтаксиса C. Это заставляет компиляторы C Microsoft использовать соглашение о системных вызовах. Один из включаемых файлов, включаемых в windows.h, определяет макросы.


Ресурсы:

1 голос
/ 21 сентября 2010

Редактировать: Очевидно, что Колин Хеберт решил проблему, но в качестве общего совета я хотел бы сказать:

В Camera.h напишите

#ifndef _CAMERA_H
#define _CAMERA_H

выше все остальное включает.И включите все файлы заголовков, необходимые в вашем файле .cpp в ваш файл .h.

По крайней мере, это то, что я считаю лучшей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...