tangyipeng100 tangyipeng100
关注数: 7 粉丝数: 39 发帖数: 357 关注贴吧数: 48
无法解析外部符号错误 各位大佬,我在学习http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Flearnopengl-cn.github.io%2F01%2520Getting%2520started%2F05%2520Shaders%2F&urlrefer=ad2abbbfd8a0325cb234f8fe977ca2d4这个例程时,按照其提供的代码尝试。在类的头文件中一旦定义了std::string或者std::ifstream变量就会出现以下无法解析外部符号的错误,调试了很久没有找到原因,各位有遇到这种情况吗,分享一下经验,谢谢了!代码: #pragma once#ifndef SHADER_H#define SHADER_H#include"glad.h" // 包含glad来获取所有的必须OpenGL头文件//#include <string>#include #include <sstream>#include using namespace std;class Shader{public: int ID; int fragment; int vertex; // constructor generates the shader on the fly // ------------------------------------------------------------------------ Shader() { const char* vShaderCode = "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n"// 位置变量的属性位置值为 0 "layout (location = 1) in vec3 aColor;"// 颜色变量的属性位置值为 1 "out vec3 ourColor;"// 向片段着色器输出一个颜色 "void main()\n" "{\n" " gl_Position = vec4(aPos, 1.0);\n" " ourColor = aColor;\n " "}\0"; string ss = "234"; const char * fShaderCode = "#version 330 core\n" "out vec4 FragColor;\n" "in vec3 ourColor;" "void main()\n" "{\n" " FragColor = vec4(ourColor, 1.0);\n" "}\n\0"; // 2. compile shaders ; // vertex shader vertex = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertex, 1, &vShaderCode, NULL); glCompileShader(vertex); const char* a = "VERTEX"; checkCompileErrors(vertex, "VERTEX"); // fragment Shader fragment = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragment, 1, &fShaderCode, NULL); glCompileShader(fragment); //checkCompileErrors(fragment, "FRAGMENT"); // shader Program ID = glCreateProgram(); glAttachShader(ID, vertex); glAttachShader(ID, fragment); glLinkProgram(ID); //checkCompileErrors(ID, "PROGRAM"); // delete the shaders as they're linked into our program now and no longer necessary glDeleteShader(vertex); glDeleteShader(fragment); } // activate the shader void use() { glUseProgram(ID); } void checkCompileErrors(unsigned int shader, const char * type) { int success; char infoLog[1024]; if (type != "PROGRAM") { glGetShaderiv(shader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(shader, 1024, NULL, infoLog); std::cout << "ERROR::SHADER_COMPILATION_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl; } } else { glGetProgramiv(shader, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(shader, 1024, NULL, infoLog); std::cout << "ERROR::PROGRAM_LINKING_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl; } } }};#endif
1 下一页