Всем привет,
Начал писать движок. Разработал хорошую архитектуру, в которой окна вьюпорта OpenGL представлено отдельным классом. В минимальной сборке все запускается.
Написал класс шейдера, все компилится. Добавляю его к вьюпорту начинаются ошибки:
1>GLSLShader.obj : warning LNK4075: /EDITANDCONTINUE wird aufgrund der Angabe von /OPT:LBR ignoriert.
1>TwoDimViewportControl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static class GLSLShader TwoDimViewportControl::shader" (?shader@TwoDimViewportControl@@0VGLSLShader@@A)".
1>TwoDimViewportControl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static unsigned int TwoDimViewportControl::vaoID" (?vaoID@TwoDimViewportControl@@0IA)".
1>TwoDimViewportControl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static unsigned int TwoDimViewportControl::vboVerticesID" (?vboVerticesID@TwoDimViewportControl@@0IA)".
1>TwoDimViewportControl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static unsigned int TwoDimViewportControl::vboIndicesID" (?vboIndicesID@TwoDimViewportControl@@0IA)".
1>TwoDimViewportControl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static struct TwoDimViewportControl::Vertex * TwoDimViewportControl::vertices" (?vertices@TwoDimViewportControl@@0PAUVertex@1@A)".
1>TwoDimViewportControl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static unsigned short * TwoDimViewportControl::indices" (?indices@TwoDimViewportControl@@0PAGA)".
1>E:\PROJECTS\Software Projects\TwoDimEngine\Implementierung\TwoDimEngine\TwoDimEngine_v.0.0.0_FreeGLUT_GLEW\Debug\TwoDimEngine_v.0.0.0.exe : fatal error LNK1120: 6 nicht aufgelöste Externe
========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========
Все ошибки исходят из этой функции:
C++ (Qt)
void TwoDimViewportControl::bindShader()
{
	GL_CHECK_ERRORS
	//load the shader
	shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
	shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
	//compile and link shader
	shader.CreateAndLinkProgram();
	shader.Use();
		//add attributes and uniforms
		shader.AddAttribute("vVertex");
		shader.AddAttribute("vColor");
		shader.AddUniform("MVP");
	shader.UnUse();
 
	GL_CHECK_ERRORS
 
	//setup triangle geometry
	//setup triangle vertices
	vertices[0].color=glm::vec3(1,0,0);
	vertices[1].color=glm::vec3(0,1,0);
	vertices[2].color=glm::vec3(0,0,1);
 
	vertices[0].position=glm::vec3(-1,-1,0);
	vertices[1].position=glm::vec3(0,1,0);
	vertices[2].position=glm::vec3(1,-1,0);
 
	//setup triangle indices
	indices[0] = 0;
	indices[1] = 1;
	indices[2] = 2;
 
	GL_CHECK_ERRORS
 
	//setup triangle vao and vbo stuff
	glGenVertexArrays(1, &vaoID);
	glGenBuffers(1, &vboVerticesID);
	glGenBuffers(1, &vboIndicesID);
	GLsizei stride = sizeof(Vertex);
 
	glBindVertexArray(vaoID);
 
		glBindBuffer (GL_ARRAY_BUFFER, vboVerticesID);
		//pass triangle verteices to buffer object
		glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);
		GL_CHECK_ERRORS
		//enable vertex attribute array for position
		glEnableVertexAttribArray(shader["vVertex"]);
		glVertexAttribPointer(shader["vVertex"], 3, GL_FLOAT, GL_FALSE,stride,0);
		GL_CHECK_ERRORS
		//enable vertex attribute array for colour
		glEnableVertexAttribArray(shader["vColor"]);
		glVertexAttribPointer(shader["vColor"], 3, GL_FLOAT, GL_FALSE,stride, (const GLvoid*)offsetof(Vertex, color));
		GL_CHECK_ERRORS
		//pass indices to element array buffer
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesID);
		glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
		GL_CHECK_ERRORS 
 
	cout<<"Initialization successfull"<<endl;
}
 В заголовочном:
C++ (Qt)
#pragma once
 
#ifndef TWODIMVIEWPORCONTROL_H
#define TWODIMVIEWPORCONTROL_H
 
/*
	Right at the start of the above code, some headers are being included. 
	The include order matters! To use GLEW with GLFW, the GLEW header must 
	be included before the GLFW header. Then, after that, include any other 
	library that may be required .
*/
 
	//#define GLEW_STATIC
 
	//Include GLEW  
    #include <GL/glew.h>  
 
    //Include GLFW  
    #include <GLFW/glfw3.h>  
 
	//Include FreeGLUT
	#include <GL/freeglut.h>
 
    //Include the standard C++ headers  
    #include <stdio.h>  
    #include <stdlib.h>  
	#include <iostream>
	#include <SOIL.h>
 
	#include <glm/glm.hpp>
	#include <glm/gtc/matrix_transform.hpp>
	#include <glm/gtc/type_ptr.hpp>
	#include "GLSLShader.h"
 
	#define GL_CHECK_ERRORS assert(glGetError()== GL_NO_ERROR);
 
	/** 
	TwoDimViewportControl is a class designed to store all of OpenGL functions and keep them 
	out of the way of  application logic. Here stored the ability to create an OpenGL 
	context on a given window and then render to that window. 
	*/
 
class TwoDimViewportControl
{
public:
	TwoDimViewportControl(void);
	virtual ~TwoDimViewportControl(void);
	int initViewportControl(int argc, char **argv);
 
	void setAffectPolygonSize(bool input){TwoDimViewportControl::affectPolygonSize = input;}
	void setZoomFactor(double zoom){TwoDimViewportControl::zoomFactor = zoom;}
 
private:
	static void display();
	static void resize(int w, int h) ;
	static void error_callback(int error, const char* description);
	static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);
	static void OnInit();
	static void OnShutdown() ;
	static void OnResize(int nw, int nh);
	static void OnRender();
	static void bindShader();
 
	//screen size
	static const int WIDTH  = 1280;
	static const int HEIGHT = 800;
 
	//shader reference
	static GLSLShader shader;
 
	//vertex array and vertex buffer object for fullscreen quad
	static GLuint vaoID;
	static GLuint vboVerticesID;
	static GLuint vboIndicesID;
 
	//out vertex struct for interleaved attributes
	struct Vertex {
		glm::vec3 position;
		glm::vec3 color;
	};
 
	//triangle vertices and indices
	static Vertex vertices[3];
	static GLushort indices[3];
 
	static bool affectPolygonSize;
	static double zoomFactor;
};
 
#endif //TWODIMVIEWPORCONTROL_H
 В чем может быть проблема?
Спасибо!