0

我正在寻找代码中的错误,但有一个问题:

 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 ‘->’ ?)

为什么它不允许我在上面使用非常量函数?如果不使用强制转换,我该怎么做才能拥有一组非常量指针?

4

3 回答 3

9

您需要取消引用两次

(*it)->foo(55);

it是指向指针的迭代器。如果你有一个std::set<a>而不是一个std::set<a*>.

于 2013-01-30T14:44:05.470 回答
3

问题是您需要尊重迭代器,然后是指针。替换it->foo(55);(*it)->foo(55);这将起作用。

于 2013-01-30T14:46:23.737 回答
2

你是间接的一级。

(*it)->foo(55);

有效,因为it它实际上是一个指向存储类型的指针,它本身就是一个指针。

于 2013-01-30T14:46:11.970 回答