在指针列表上使用迭代器

时间:2015-05-13 12:21:02

标签: c++ list iterator operator-precedence

我试图通过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成员函数的类,它返回游戏的名称。我该怎么做才能编译呢?

4 个答案:

答案 0 :(得分:8)

operator precedence存在问题,请尝试添加括号

(*it)->get_name()

答案 1 :(得分:7)

您遇到operator precedence问题。 ->的优先级高于*,因此您确实在做:

*(it->get_name())
由于Game*没有任何成员,所以

没有编译,更不用说get_name了。您需要先取消引用,需要括起来:

(*it)->get_name()

答案 2 :(得分:6)

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

答案 3 :(得分:2)

关于运营商优先权。

应为(*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 ;
//  ...
}