次のコードをコンパイルする際に問題が発生します。
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は2つのオブジェクトになり、これらの各クラスには、次のように[]演算子がオーバーロードされます。
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 *配列を値で渡すため、参照できません。
3番目の[]演算子を追加してみました。
inline const float& operator[](int index) const { return m_data[index]; }
しかし、それは私のコンパイラを爆発させました。これができない理由はありますか?