Вызвать функцию на итераторе
У меня есть std:: список объектов Ray, который я хочу перебрать.
for (std::list<Ray>::const_iterator it = clRay.begin(), end = clRay.end(); it != end; ++it) {
*it->setDir( m_v3Position - *it->getOrigin() )
}
А у объектов Ray есть методы setDir() и getOrigin():
const QVector3D &getOrigin() const {
return m_v3Origin;
}
void setDir( const QVector3D &dir )
{
m_v3Dir = dir;
}
Setdir () не является проблемой для компилятора, но я не могу вызвать getOrigin(). Потому что тогда я получаю ошибку:
src/AreaLight.cpp: In member function ‘virtual void AreaLight::shadowFeeler(std::__cxx11::list<Ray>&, double&, ColorType&) const’:
src/AreaLight.cpp:18:17: error: no match for ‘operator*’ (operand type is ‘const QVector3D’)
Я думаю, что это постоянная проблема, но я не знаю, как ее исправить.
1 ответ
Вы написали *it->
, Вы должны написать просто it->
, Здесь есть только один уровень косвенности.
Это влияет на оба звонка.
На самом деле, призыв к setDir
сломан по другой причине, которая заключается в том, что это неconst
и вы пытаетесь добраться до него через const_iterator
, Добавление *
не решает эту проблему; это просто маскирует это новой проблемой. Случайное добавление еще больше *
с, не понимая, что они имеют в виду, это тоже не путь.