在指针列表上使用迭代器

Ali*_*ami 4 c++ iterator list 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 ;
    //  ...
}
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我有这个错误:

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 ;
               ^
Run Code Online (Sandbox Code Playgroud)

Game是一个具有get_name成员函数的类,它返回游戏的名称.我该怎么做才能编译?

Cor*_*mer 8

运营商优先级存在问题,请尝试添加括号

(*it)->get_name()
Run Code Online (Sandbox Code Playgroud)


Bar*_*rry 7

您遇到了运营商优先问题.->优先级高于*,所以你真的在做:

*(it->get_name())
Run Code Online (Sandbox Code Playgroud)

因为Game*没有任何成员,所以没有编译,更不用说了get_name.您需要先取消引用,需要括起来:

(*it)->get_name()
Run Code Online (Sandbox Code Playgroud)


tim*_*rau 6

你应该写,(*it)->get_name()因为它operator->具有比解引用运算符更高的优先级.