我正在使用OpenGL来渲染相机视角,我的代码中有一点我试图采用光的方向(此处显示为“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
同样,这个代码的大部分是为类预先写好的(即向量和矩阵类型),但如果有人可以帮我解读错误意味着什么,那将非常感激!我可以根据需要提供更多信息。
我认为'data'或'data-&gt; 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);
答案 0 :(得分:1)
data->dir
是不变的。这意味着您无法更改它,并且您正在尝试为其分配不同的值,这就是编译器对您生气的原因。有关详情,请参阅const-correctness。
答案 1 :(得分:0)
发生此错误是因为您尝试在const对象上调用非const成员函数。在代码中的某个时刻,您正在调用const vec4<double>
的赋值运算符。
赋值运算符(operator=
)是非const的,因为赋值对象将修改分配给的对象(为其赋予新值)。
从您的示例中不清楚问题究竟发生在哪里。如果您仍然遇到问题,请尝试将示例缩小到最小的完整程序,以演示此问题,我们可以进一步解释。