2015-12-25 2 views
0

У меня есть проект OpenGL со многими заголовочными файлами. Я использую LIB GLEW и мои Main.cpp начинается так:Как включить заголовок в порядок?

// use GLEW as static lib requires GLEW_STATIC 
#define GLEW_STATIC 
#include <GL/glew.h> 
// ... 

Там сообщило об ошибке:

GL/glew.h(85): fatal error C1189: #error: gl.h included before glew.h 

Так что мне нужно включить GL/glew.h перед любым другим заголовком, который включает gl.h. Поэтому я добавляю эти строки в каждый заголовок:

#ifndef GLEW_INCLUDED 
#define GLEW_STATIC 
#include <GL/glew.h> 
#define GLEW_INCLUDED 
#endif 

Я должен изменить каждый заголовок, кажется, «грязной» работой. Есть ли какой-либо чистый способ сделать это?

ответ

2

Чистый способ сделать это - осуществлять самоконтроль. Или более того, остановите включение gl.h. Если вы используете OpenGL loading library, тогда он контролирует ваш доступ к OpenGL. Пусть он выполняет свою работу и включает только свои заголовки.

Поэтому нет необходимости в GLEW_INCLUDED.

Что касается GLEW_STATIC, это определение, которое вы добавляете в свою систему сборки в командной строке, а не в каждый файл, который вы используете. Подобно тому, как вы не определяете NDEBUG или другие подобные определения.

+0

Я восстановил заголовки, удалив эти строки. Я обнаружил, что некоторые заголовки включают 'glew.h', и ни одна из них не включает' gl.h'. Затем я добавил '#define GLEW_STATIC'' #include '' 'Main.cpp'. Все еще получил ошибку. Я сделал ошибку? – stanleyerror

+0

@stanleyerror: Я сказал положить 'GLEW_STATIC' в вашу систему сборки в командной строке, а не в' main'. Если вы используете make-файл, вы добавляете его в ключи командной строки вашего компилятора. Если вы используете Visual Studio, тогда в вашем проекте есть параметр для определения (как отладки, так и выпуска). Я не могу сказать вам, как использовать ваши инструменты построения, но это то, где вы его положили. –

Смежные вопросы