static const GLchar * c变为未定义

时间:2014-06-06 12:30:44

标签: c++ opengl

shaderLoader函数检索String,然后使用c_str()将其转换为const char。但由于某种原因,c未定义。任何提示?

static const GLchar *  c[1000];

*c =  shaderLoader("C:\\Users\\Dozent-01\\Desktop\\User\\CG\\bin\\vertShader.txt").c_str();

glShaderSource(vertex_shader, 1, c, NULL);

2 个答案:

答案 0 :(得分:0)

在您的代码中包含此文件

  #include <GL/glew.h>

参考this帖子

答案 1 :(得分:0)

我认为c_str()的行为与std::string::c_str()的行为相同。这不是 covnert 任何东西。它为您提供了一个指向存储在字符串中的数据的指针,只有在字符串本身保持活动且未更改时才有效。

我还假设shaderLoader()返回一个临时对象。您获取指向其数据的指针并将该指针存储在c[0]中。在该表达式的末尾,临时被破坏,因此指针不再指向有效数据。它晃来晃去。

您必须复制数据,而不仅仅是存储指针。像这样:

auto str = shaderLoader("whatever");
c[0] = new GLchar[str.size() + 1];
strcpy(c[0], str.c_str());
// don't forget to delete[] the memory when no longer needed

当然,还有一个问题是为什么你有一个1000个指向cosnt GLchar的数组。我怀疑你实际上意味着c是存储字符串的字符的缓冲区。如果是这样,你可以改变这样的代码:

static const GLchar c[1000];

strncpy(c, shaderLoader("whatever").c_str(), sizeof(c));