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

2回逆参照する必要があります:

(*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

あなたは1レベルの間接参照です。

(*it)->foo(55);

事実上、格納されているit型へのポインタであり、それ自体がポインタであるため、機能します。

于 2013-01-30T14:46:11.970 に答える