我正在使用OpenGL渲染相机透 View ,并且在代码中的一个点上尝试获取光的方向(此处显示为“Vector4”类型),然后将其乘以表示“Matrix4x4”类型的矩阵Modelview转换(对不起,如果这没有任何意义,这是针对学校项目的,因此我仍在学习此类内容)无论如何,我的代码如下...
Vector4 lightDirection = data->dir * follow->getModelviewMatrix().getInverse().getTranspose();
data->dir = lightDirection;
setLight(*data);
这给我以下错误:
passing 'const vec4<double>' as 'this' argument of 'vec4<T>& vec4<T>::operator=(const vec4<T>&)[with T = double]' discards qualifiers
同样,很多代码是针对该类编写的(即 vector 和矩阵类型),但是如果有人可以帮助我破译错误的含义,将不胜感激!我可以根据需要提供更多信息。
我认为'data'或'data-> dir'是const,但是我找不到任何提及它们的地方。 'dir'的类型为SceneLightData,添加到该目录时,我正在执行以下操作:
void Scene::addLight(const SceneLightData &sceneLight)
{
SceneLightData light = sceneLight;
m_lights.push_back(&light);
}
该行发生错误:
data->dir = lightDirection;
编辑
问题解决了。感谢大家!解:
void Scene::addLight(const SceneLightData &sceneLight)
{
SceneLightData* light = new SceneLightData;
*light = sceneLight;
m_lights.push_back(light);
}
和
SceneLightData* data = m_lights[i];
data->dir = data->dir * follow->getModelviewMatrix().getInverse().getTranspose();
setLight(*data);
最佳答案
data->dir
是常量。这意味着您无法更改它,而您正在尝试为其分配一个不同的值,这就是为什么编译器会生您的气的原因。有关更多信息,请参见const-correctness。
关于c++ - const丢弃Qualifers:C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8101805/