指针存储在std :: set const中吗?

时间:2013-01-30 14:42:38

标签: c++ stl iterator set const

我正在搜索代码中的错误,我遇到了问题:

 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函数?如果不使用强制转换,我可以做一组非常量指针吗?

3 个答案:

答案 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实际上是指向存储类型的指针,它本身就是一个指针。