在迭代器上调用函数
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
到达它。添加 *
并不能解决该问题;它只是用一个新问题掩盖了它。随意添加更多的 *
,而不理解它们的意思,也不是要走的路。
我有 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
到达它。添加 *
并不能解决该问题;它只是用一个新问题掩盖了它。随意添加更多的 *
,而不理解它们的意思,也不是要走的路。