Нельзя включать <gl/gl.h>
Я использую 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 ...
}
Что я делаю неправильно?
Ответы
Ответ 1
Просто сначала включите windows.h.
#include <windows.h>
Как говорится в FAQ OpenGL:
Также обратите внимание, что перед #include<GL/gl.h>
вам нужно поставить инструкцию #include <windows.h>
. Microsoft требует, чтобы системные DLL использовали специальное соглашение о вызове, которое не является стандартным вызовом для большинства компиляторов Win32 C, поэтому они аннотировали вызовы OpenGL в gl.h с некоторыми макросами, которые расширяются до нестандартного синтаксиса C. Это заставляет компиляторы Microsoft C использовать соглашение о системном вызове. Один из включенных файлов, включенных в windows.h, определяет макросы.
Ресурсы:
Ответ 2
Edit: Очевидно, Колин Хеберт решил проблему, но, как общий совет, я бы хотел сказать:
В Camera.h пишите
#ifndef _CAMERA_H
#define _CAMERA_H
выше включает все остальные.
И включите все файлы заголовков, необходимые в вашем .cpp файле в вашем .h файле.
По крайней мере, это то, что я считаю лучшей практикой.