我在編譯程序時遇到問題,找不到任何錯誤。有問題的代碼和錯誤消息現介紹如下:Shader類中的語法錯誤?
我的錯誤信息:
- 錯誤2錯誤C4430:缺少類型說明符 - 假定爲int。注:C++ 不支持默認int C:\用戶\ codasm \桌面\諾威 projekty \ glfwframework1 \ system.h中9 1 GLFWFramework1
- 錯誤1個錯誤C2143:語法錯誤:缺少 ';'前 '' C:\用戶\ codasm \桌面\諾威 projekty \ glfwframework1 \ system.h中9 1 GLFWFramework1 *
錯誤消息鏈接我system.h中第9行,我不明白什麼是錯的:
Shader* shader;
system.h中:
#ifndef System_h
#define System_h
#include "Core.h"
class System
{
GLFWwindow* window;
Shader* shader;
// GLuint shader;
GLenum error;
GLuint VAO, VBO, TBO;
vector<vec3> vertices;
vector<vec2> uvs;
vector<vec3> normals;
public:
System();
~System();
bool InitWindow();
bool InitExtensions();
bool InitShaders();
bool InitVertices();
bool InitTextures();
bool InitModels();
void Resize(GLFWwindow* window);
void BeginScene();
void EndScene(GLFWwindow* window);
void Display(GLFWwindow*);
void Run();
void ShutdownWindow();
void ShutdownShaders();
void ShutdownVertices();
void ShutdownTextures();
};
static void KeyPress(GLFWwindow* window, int key, int scancode, int action, int mods);
static void ErrorProc(int error, const char* description);
#endif
Shader.cpp:
#pragma once
#include "Core.h"
class Shader
{
GLuint shader;
public:
Shader(void);
~Shader(void);
bool ConfigureShaders(string vsName, string fsName);
void SetShaderVar(string name, mat4 MVP);
void EnableShader(bool enable);
GLuint GetShader();
};
Shader.h:
#include "Shader.h"
Shader::Shader(void)
{
}
Shader::~Shader(void)
{
}
bool Shader::ConfigureShaders(string vsName, string fsName)
{
// Wielkosc buforow na bledy moze powodowac problemy w przypadku dluzszych komunikatow
// Utworz Shadery
GLuint VS = glCreateShader(GL_VERTEX_SHADER);
GLuint FS = glCreateShader(GL_FRAGMENT_SHADER);
// Czytaj Shadery
string LineBuffer;
fstream VSFile(vsName.c_str(),ios::in);
string VSSource;
if(VSFile.is_open())
{
while(getline(VSFile,LineBuffer))
VSSource += "\n"+LineBuffer;
VSFile.close();
}
fstream FSFile(fsName.c_str(),ios::in);
string FSSource;
if(FSFile.is_open())
{
LineBuffer.clear();
while(getline(FSFile,LineBuffer))
FSSource += "\n"+LineBuffer;
FSFile.close();
}
GLint result;
// int infoLogLength;
// Wprowadz, Kompiluj i Sprawdz Shadery
char const* VSSrc = VSSource.c_str();
glShaderSource(VS,1,&VSSrc,NULL);
glCompileShader(VS);
glGetShaderiv(VS,GL_COMPILE_STATUS,&result);
// glGetShaderiv(VS,GL_INFO_LOG_LENGTH,&infoLogLength);
char VSErrMsg[256];
glGetShaderInfoLog(VS,1024,NULL,VSErrMsg);
cout<<VSErrMsg<<endl;
char const* FSSrc = FSSource.c_str();
glShaderSource(FS,1,&FSSrc,NULL);
glCompileShader(FS);
glGetShaderiv(VS,GL_COMPILE_STATUS,&result);
// glGetShaderiv(VS,GL_INFO_LOG_LENGTH,&infoLogLength);
char FSErrMsg[256];
glGetShaderInfoLog(FS,1024,NULL,FSErrMsg);
cout<<FSErrMsg<<endl;
// Polacz Shadery
shader = glCreateProgram();
glAttachShader(shader,VS);
glAttachShader(shader,FS);
glBindAttribLocation(shader,0,"vertexPos");
glBindAttribLocation(shader,1,"vertexUV");
glLinkProgram(shader);
// Sprawdz Program
glGetProgramiv(shader,GL_LINK_STATUS,&result);
// glGetProgramiv(Shader,GL_INFO_LOG_LENGTH,&infoLogLength);
char PrgErrMsg[256];
glGetProgramInfoLog(shader,1024,NULL,PrgErrMsg);
cout<<PrgErrMsg<<endl;
// Kasuj Shadery
glDeleteShader(VS);
glDeleteShader(FS);
return true;
}
void Shader::SetShaderVar(string name, mat4 MVP)
{
GLuint MatrixLocation = glGetUniformLocation(shader,"MVP");
glUniformMatrix4fv(MatrixLocation,1,GL_FALSE,&MVP[0][0]);
}
void Shader::EnableShader(bool enable)
{
if(!shader)
{
if(enable)
glUseProgram(shader);
else
glUseProgram(0);
}
}
GLuint Shader::GetShader()
{
return shader;
}
你真的在'Shader.h'中包含「#Shader.h」嗎? –
@LuchianGrigore:我想最後兩個文件的標籤已經混在一起了,''Shader.h''包含在「Shader.cpp」中'就像你期望的那樣。 –