我使用OpenGL渲染相機視角,並在我的代碼中的一個點我試圖採取光的方向(這裏顯示爲類型「Vector4」),並乘以一個代表Modelview轉換的Matrix4x4類型的矩陣(對不起,如果這沒有任何意義,這是針對學校項目的,因爲我仍然在學習這個東西)。無論如何,我的代碼如下所示...Const丟棄Qualifers:C++
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
再次,多日的代碼是爲類預先編寫的(即向量和矩陣類型),但如果有人可以幫助我解讀錯誤意味着什麼,將不勝感激!我可以根據需要提供更多信息。
我認爲'數據'或'數據 - >目錄'是常量,但是我找不到它們中的任何一個。 '目錄' 的類型是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);
'Vector4'是'const vec4'的'typedef'嗎? –
Shahbaz
哦,等一下,你會看到'data-> dir = lightDirection;'這行的錯誤。 – Shahbaz
退出'addLight'時'light'不再存在,所以添加到'm_lights'的指針在函數返回時將無效。你應該做'm_lights.push_back(new SceneLightData(sceneLight));'並且確保從'm_lights'中移除或者'Scene'破壞時它被刪除。 –