Const丢弃限定符:c++

Const Discards Qualifers: C++

本文关键字:c++ Const      更新时间:2023-10-16

我使用OpenGL来渲染相机视角,在我的代码中有一点我试图采取光的方向(此处显示为类型"Vector4")并将其乘以代表Modelview转换的类型"Matrix4x4"的矩阵(对不起,如果这没有任何意义,这是一个学校项目,因此我仍在学习这个东西)无论如何,我的代码如下…

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->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对象上调用非const成员函数。在代码中的某个点,您正在调用const vec4<double>的赋值操作符。

赋值操作符(operator=)是非const的,因为赋值给一个对象会修改被赋值对象(给它一个新值)。

从你的例子中不清楚问题究竟发生在哪里。如果您仍然有问题,请尝试将示例简化为演示问题的最小完整程序,我们可以进一步解释。