在迭代器上调用函数

call function on iterator

我有 std::list 个 "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’)

我认为这是一个常量问题,但我不知道如何解决它。

您写了*it->。你应该只写 it->。这里只有一层间接。

这会影响两个调用。

事实上,对 setDir 的调用因另一个原因而中断,即它不是 const,而您正试图通过 const_iterator 到达它。添加 * 并不能解决该问题;它只是用一个新问题掩盖了它。随意添加更多的 *,而不理解它们的意思,也不是要走的路。