我在编译以下代码时遇到了一些问题:
GLint iModelMatrix = glGetUniformLocation(m_shaderProgramID, "mvMatrix");
glUniformMatrix4fv(iModelMatrix, 1, GL_FALSE, &myMatrix[0]);
GLint iLight = glGetUniformLocation(m_shaderProgramID, "vLightPos");
glUniform3fv(iLight, 1, &myVector[0]);
现在 myMatrix 和 myVector 是两个对象,每个类都重载了 [] 运算符,如下所示:
inline float& operator[](int index) { return m_data[index]; }
inline float operator[](int index) const { return m_data[index]; }
我收到以下错误:
error C2102: '&' requires l-value
我试图理解为什么 '&' 需要左侧值?我以前传递过这样的数据。我不是简单地将地址赋予 m_data 数组的第一个索引吗?这不构成浮动*吗?
为什么不满足功能规范?
void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
编辑:
好吧,似乎因为我将这些对象作为 const 引用传递给进行上述调用的函数,所以它按值传递 float* 数组,因此我无法引用它们。
我尝试添加第三个 [] 运算符:
inline const float& operator[](int index) const { return m_data[index]; }
但这让我的编译器爆炸了。我不能这样做有什么原因吗?