在指针列表上使用迭代器

Using Iterators on a list of pointers

我正在尝试遍历 list 个指针:

int main () {
    list<Game*> Games;
    Games = build_list_from_file(); //Reading the games.info file
    list<Game*>::iterator it = Games.begin();
    it++;
    cout << *it->get_name() << endl ;
    //  ...
}

编译的时候报错:

error: request for member ‘get_name’ in ‘* it.std::_List_iterator<_Tp>::operator-><Game*>()’, which is of pointer type ‘Game*’ (maybe you meant to use ‘->’ ?)
  cout << *it->get_name() << endl ;
               ^

Game是一个具有get_name成员函数的class,即returns游戏的名称。我应该怎么做才能编译?

您应该写 (*it)->get_name(),因为 operator-> 的优先级高于取消引用运算符。

您对 operator precedence 有疑问,请尝试添加括号

(*it)->get_name()

您 运行 遇到了 operator precedence 问题。 -> 的优先级高于 *,所以你实际上在做:

*(it->get_name())

无法编译,因为 Game* 没有任何成员,更不用说 get_name。您需要先进行解引用,需要用括号括起来:

(*it)->get_name()

一切都与运算符优先级有关。

应该是(*it)->get_name()

如果可以使用 C++11,则使用 auto 以获得更好的可读性。

int main (){
    list<Game*> Games;
    Games = build_list_from_file(); //Reading the games.info file
    auto it = Games.begin();
    it++;
    cout << (*it)->get_name() << endl ;
//  ...
}