简体   繁体   English

将迭代器解引用到自定义结构字段

[英]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).nameitr->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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM