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