Вызвать функцию на итераторе

У меня есть 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, Добавление * не решает эту проблему; это просто маскирует это новой проблемой. Случайное добавление еще больше *с, не понимая, что они имеют в виду, это тоже не путь.

Другие вопросы по тегам