2015-05-07 6 views
0

Хорошо, я пытался разделить контекст окна между различными исходными файлами, главным образом моим основным файлом C++ и основным gameloop, он выглядит так (урезанный) , это сделано в OpenGL 3.3 и GLFW 3 с использованием Code :: Blocks 13.12. Я пытаюсь сделать это, чтобы сократить размер моих отдельных файловКак разделить контекст окна между исходными файлами в GLFW 3

Everytime я пытаюсь скомпилировать я получаю:

mutiple definitions of 'window' 

внутри файла mainLoop.cpp.

window.h

#ifndef WINDOW_H 
#define WINDOW_H 

//include glfw etc... 

GLFWwindow* window; 

#endif //WINDOW.h 

mainLoop.cpp

//include glfw etc... 

#include "WINDOW.h" 

void mainLoop() 
{ 
    do{ 
     //some code that uses 'window' context 
    }while(glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && glfwWindowShouldClose(window) == 0); //<- "window" causing problems 
} 
//relevant cleanup 

main.cpp

//include necessary headers (glfw, glu, glew, and others) 

#include "WINDOW.h" 

void mainLoop(); 

int main(void) 
{ 
    //initialize opengl and whatnot. 
    window = glfwCreateWindow(512, 288, "NULL", NULL, NULL); 
    glfwMakeContextCurrent(window); 

    mainLoop(); 

} 

Я не знаю, почему я не могу использовать контекст таким образом, он работает, если мой код «mainLoop» сам по себе внутри основного (с использованием WINDOW.hpp). Помощь очень ценится.

+0

Это не имеет ничего общего с GLFW. Теперь вы включаете 'window.h' в два исходных файла, поэтому переменная' window' определяется дважды. Если вы действительно хотите глобальную переменную, вы можете посмотреть на соответствующий вопрос: [Как использовать extern для обмена глобальными переменными между исходными файлами в C++?] (Http://stackoverflow.com/questions/28106468/how-can- i-use-extern-to-share-globe-variables-between-source-files-in-c) – Leiaz

+0

@Leiaz, использующий extern в окне «GLFWwindow *», просто дает мне неопределенные ссылки на «окно» повсюду по какой-либо причине. – MetroidChild

+0

Это потому, что с переменной 'extern' только что объявлена ​​переменная, она все равно должна быть определена где-то (в файле cpp), но только один раз. – Leiaz

ответ

0

Хорошо, ответ был намного проще, чем я изначально думал. Мне не нужно было использовать GLFWwindow* window в качестве глобальной переменной, мне просто нужно было передать window в качестве параметра: void mainLoop(GLFWwindow* window); Теперь окно появляется так, как должно!

Спасибо как @Leiaz, так и @molbdnilo за помощь, это было высоко оценено!

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