2016-06-18 7 views
0

Я получаю сообщение об ошибке LNK2005 по какой-либо причине или, по крайней мере, никому, что я могу определить. По сути, используя следующий код, я могу скомпилировать без проблем.Похоже на случайные ошибки LNK2005 с GLFW3

test.h

#define GLEW_STATIC 
#include <GL\glew.h> 
#include <GLFW\glfw3.h> 

namespace test 
{ 
    //Objects and variables 
    GLFWwindow* window; 

    //Function prototypes 
    bool Initialize(); 
} 

test.cpp

#include "test.h" 
#include <iostream> 

bool test::Initialize() 
{ 
    std::cout << "Initializing GLFW: OpenGL version 3.3 \n"; 

    //Initialize GLFW 
    glfwInit(); 
    //Set window properties (version 3.3, core profile, not resizeable) 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

    //Create Window 
    window = glfwCreateWindow(800, 800, "Learn OpenGL", nullptr, nullptr); 
    if (window = nullptr) 
    { 
     std::cout << "Failed to create GLFW window \n"; 
     glfwTerminate(); 
     return false; 
    } 

    return true; 
} 

int main() 
{ 
    test::Initialize(); 

    return 0; 
} 

Однако при составлении почти одно и то же (http://pastebin.com/VpPep9pM), наряду с другим кодом, это дает ошибки:

Ошибка LNK2005 "struct GLFWwindow * window" (? window @@ 3PAU GLFWwindow @@ A), уже определенный в Main.obj OpenGL D: \ Users \ Matthew \ documents \ visual studio 2015 \ Projects \ OpenGL \ OpenGL \ System.obj

Ошибка LNK2005 "struct GLFWwindow * System :: window" (? window @ System @@ 3PAUGLFWwindow @@ A), уже определенный в Main.obj OpenGL D: \ Users \ Matthew \ documents \ visual studio 2015 \ Projects \ OpenGL \ OpenGL \ System.obj

Ошибка LNK1169 один или несколько умножить Определенные символы найдены OpenGL D: \ Users \ Matthew \ documents \ visual studio 2015 \ Projects \ OpenGL \ Debug \ OpenGL.exe

Итак, я хотел бы знать, что вызывает ошибки, я предполагаю, что это имеет что-то делать с «контекстом».

ответ

0

В вашем файле заголовка вы определяете переменную, когда ее необходимо объявить в заголовке и определить в одном исходном файле.

В test.h

namespace test { 
    extern GLFWwindow* window; 
} 

и в main.cpp

namespace test { 
    GLFWwindow* window; 
} 

Без extern в заголовке, вы создаете один экземпляр test::window в каждом исходном файле, который включает его, что проблема, если есть два или более определений.

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

  • Нет связанных вопросов^_^