【发布时间】:2015-12-11 08:26:47
【问题描述】:
我对 C++ 比较陌生,在文件中创建类时遇到了一些问题。我正在尝试从单独的类 Shader 调用构造函数,并使用所述类中的方法。但是,每当我尝试构建解决方案时,都会收到以下错误:
Error 2 error LNK2019: unresolved external symbol "public: void __thiscall Shader::Use(void)" (?Use@Shader@@QAEXXZ) referenced in function _main
Error 1 error LNK2019: unresolved external symbol "public: __thiscall Shader::Shader(char const *,char const *)" (??0Shader@@QAE@PBD0@Z) referenced in function _main
我知道项目属性链接器或渲染系统没有任何问题,因为我以前用我当前的配置渲染过东西,所以我认为它一定与代码有关,但我想不通出:
main.cpp
#include <iostream>
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>
// Other includes
#include "Shader.h"
int main ()
{
(... Window Setup ...)
// Build and compile shader program
Shader shaders ("shader.vs", "shader.frag");
(... Set up vertex data (and buffer(s)) and attribute pointers ...)
// Game loop
while(!glfwWindowShouldClose (window))
{
glfwPollEvents ();
ourShader.Use ();
(... Draw triangle ...)
glfwSwapBuffers (window);
}
(... De-allocate all resources ...)
(... Terminate window ...)
return 0;
}
着色器.h
#ifndef SHADER_H
#define SHADER_H
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <GL/glew.h>
class Shader
{
public:
GLuint Program;
Shader(const GLchar* vertexPath, const GLchar* fragmentPath);
void Use ();
};
#endif
着色器.cpp
#ifndef SHADER_H
#define SHADER_H
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <GL/glew.h>
#include "Shader.h"
class Shader
{
public:
GLuint Program;
Shader::Shader(const GLchar* vertexPath, const GLchar* fragmentPath)
{
(... 1. Retrieve the vertex/fragment source code from filePath ...)
(... 2. Compile shaders ...)
(... 3. Link shader program ...)
(... 4. Delete shaders after usage ...)
}
void Shader::Use ()
{
(... Use current shader program ...)
}
};
#endif
任何帮助将不胜感激。如果需要更多代码,我可以提供。提前致谢!
【问题讨论】:
-
你真的在编译 Shader.cpp 吗?
-
您应该只在标题中定义一次类。成员的定义放在源文件中。
标签: c++ opengl linker-errors glfw