[英]Dereferencing Iterator to Custom Struct Field
I have a vector players which I would like to iterate over. 我有一个要迭代的矢量播放器。 The 'player' struct appears as follows:
“玩家”结构如下所示:
struct player { string name; int rating; };
I am using the iterator in a for loop to see if any of the 'players' have the name 'playerName' (a string). 我在for循环中使用迭代器,以查看是否有任何“玩家”具有名称“ playerName”(字符串)。
for (vector<player>::iterator itr = players.begin(); itr != players.end(); ++itr) { if (playerName.compare(*itr->name) == 0) return true; } return false;
Unfortunately, I keep running into an error: 'error C2100: illegal indirection' (visual C++ 2008). 不幸的是,我一直遇到一个错误:“错误C2100:非法间接访问”(Visual C ++ 2008)。 I believe that I'm dereferencing the iterator incorrectly;
我认为我错误地取消了迭代器的引用; is there a better way to do so?
有更好的方法吗?
*itr->name
is equivalent to (*itr)->name
. *itr->name
等效于(*itr)->name
。
In your code, the type of (*itr)
is player
, not player*
, so the compiler is basically telling you that you're trying to dereference something that isn't a pointer. 在您的代码中,
(*itr)
的类型是player
,而不是player*
,因此编译器基本上是在告诉您您要取消引用不是指针的内容。
The correct way of doing that would be (*itr).name
or itr->name
, both meaning "dereference itr then access name". 正确的做法是
(*itr).name
或itr->name
,都意味着“先引用itr然后访问名称”。
I believe that I'm dereferencing the iterator incorrectly; 我认为我错误地取消了迭代器的引用;
See corrected code: 查看更正的代码:
if (playerName.compare(itr->name) == 0)
or 要么
if (playerName.compare((*itr).name) == 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.