C++ 获得;0:1(1)错误:意外的新“U标识符”;尝试编译顶点着色器时

C++ 获得;0:1(1)错误:意外的新“U标识符”;尝试编译顶点着色器时,c++,glsl,C++,Glsl,我正试图重写我正在使用的着色器加载程序,当我试图编译我的程序时,我不断得到标题错误。我在搜索相关问题时发现了一些主题,这些主题表明问题可能与我使用字符串有关,因此我尝试将加载的着色器从字符串对象复制到数组,但这种情况仍在发生。以下是初始化函数的相关部分: // Begin shader loading vertShader = glCreateShader(GL_VERTEX_SHADER); fragShader = glCreateShader(GL_FRAGMENT_SHADER); /

我正试图重写我正在使用的着色器加载程序,当我试图编译我的程序时,我不断得到标题错误。我在搜索相关问题时发现了一些主题,这些主题表明问题可能与我使用字符串有关,因此我尝试将加载的着色器从字符串对象复制到数组,但这种情况仍在发生。以下是初始化函数的相关部分:

// Begin shader loading
vertShader = glCreateShader(GL_VERTEX_SHADER);
fragShader = glCreateShader(GL_FRAGMENT_SHADER);

// Vertex shader first
vertShaderCode = loader.read("vs.txt");

char codeHolder[vertShaderCode.size() + 1];
std::size_t length = vertShaderCode.copy(codeHolder, vertShaderCode.size(), 0);
codeHolder[length] = '\0';

const char* tmp1 = codeHolder;

// Compile the vertex shader
glShaderSource(vertShader, 1, &tmp1, NULL);
glCompileShader(vertShader);
这比可能需要的要详细一点,但我试图非常明确,所以我没有遗漏任何东西

我知道我的着色器加载程序类工作正常,因为在我检查编译状态和打印错误消息的部分中,我添加了一些代码来检查以确保所有内容都正确传递:

//check the compile status
glGetShaderiv(vertShader, GL_COMPILE_STATUS, &shader_status);
if (!shader_status) 
    {
    ofstream fout;
    fout.open("verification.txt");
    fout << vertShaderCode << endl;

    int index = 0;
    while(tmp1[index] != '\0' && index < 1000)
        {
        fout << tmp1[index];
        index++;
        }
    fout << endl;
    index = 0;
    while(codeHolder[index] != '\0' && index < 1000)
        {
        fout << codeHolder[index];
        index++;
        }
    fout.close();

    GLchar InfoLog[1024];
    glGetShaderInfoLog(vertShader, sizeof(InfoLog), NULL, InfoLog);
    fprintf(stderr, "Vertex Shader %d: '%s'\n", vertShader, InfoLog);
    return false;
    }
我知道我的程序的其余部分也可以很好地工作,因为如果我只是将着色器硬编码到我的应用程序中,它就可以完美地工作

提前谢谢,这太烦人了

编辑:这是我的makefile

# Linux
CC=g++
LIBS= -lglut -lGLEW -lGL

# Compiler flags
CXXFLAGS= -g -Wall -std=c++0x

all: ../bin/Matrix

../bin/Matrix: ../src/main.cpp
    $(CC) $(CXXFLAGS) ../src/main.cpp -o ../bin/Matrix $(LIBS)

char代码持有者[vertShaderCode.size()+1]这不是合法的C++。那么你的代码是如何编译的呢?如果是这样的话,我不太确定。我正在使用VMware player运行Ubuntu发行版,我只是用g++编译它。程序正确地写入了“verification.txt”,所以它肯定在运行。@Nicolas我试着从
char codeHolder[vertShaderCode.size()+1]更改它
字符编码持有者[2048]并且它没有改变编译,也没有改变我在终端遇到的错误。
# Linux
CC=g++
LIBS= -lglut -lGLEW -lGL

# Compiler flags
CXXFLAGS= -g -Wall -std=c++0x

all: ../bin/Matrix

../bin/Matrix: ../src/main.cpp
    $(CC) $(CXXFLAGS) ../src/main.cpp -o ../bin/Matrix $(LIBS)