c++ - Const 丢弃限定符 : C++

标签 c++ constants qualifiers

我正在使用 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

同样,大部分代码都是为类(即 vector 和矩阵类型)预先编写的,但如果有人能帮我破译错误的含义,我将不胜感激!我可以根据需要提供更多信息。

我认为“data”或“data->dir”是常量,但我找不到其中任何一个被提及。 '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 丢弃限定符 : C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8101805/

相关文章:

c++ - 我可以通过引用函数来传递 auto_ptr 吗?

.net - 为什么默认情况下文字不是 const ?

c++ - 方法声明中 & 符号的含义

c++ - 重载解析和指向 const 的共享指针

C++ - 函数头中const和static关键字的区别

c++ - 是否可以在特定类型的元组上定义扩展方法?

c++ - 使用 boost::asio 和 std::wstring 解析网络节点

c++ - 为什么 C++ try/catch 没有捕获到 "pure virtual call"异常?

java - Java中声明静态常量会影响编译后的类

c++ - const 引用转换为非常量后的行为