在指针列表上使用迭代器
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 ;
// ...
}
我正在尝试遍历 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 ;
// ...
}