我正在搜索代码中的错误,我遇到了问题:
class a
{
public:
void foo(int a) {}
}
std::set<a*> set;
std::set<a*>::iterator it = set.begin();
it->foo(55); //gives me error:
// error: request for member ‘foo’ in ‘* it.std::_Rb_tree_const_iterator<_Tp>::operator-><a*>()’, which is of pointer type ‘a* const’ (maybe you meant to use ‘->’ ?)
为什么它不允许我对它使用非const函数?如果不使用强制转换,我可以做一组非常量指针吗?
答案 0 :(得分:9)
您需要取消引用两次:
(*it)->foo(55);
- it
是指针的迭代器。如果您有std::set<a>
而不是std::set<a*>
,那么您的代码就是正确的。
答案 1 :(得分:3)
问题是您需要依赖迭代器然后指针。将it->foo(55);
替换为(*it)->foo(55);
这将有效。
答案 2 :(得分:2)
你是间接的一个层次。
(*it)->foo(55);
有效,因为it
实际上是指向存储类型的指针,它本身就是一个指针。