Разыменование итератора в поле пользовательской структуры

У меня есть векторные плееры, которые я хотел бы повторить. Структура ‘player’ выглядит следующим образом:

struct player {
string name;
int rating;
};

Я использую итератор в цикле for, чтобы узнать, есть ли у какого-либо из «игроков» имя «playerName» (строка).

for (vector<player>::iterator itr = players.begin(); itr != players.end(); ++itr) {
if (playerName.compare(*itr->name) == 0) return true;
}
return false;

К сожалению, я продолжаю сталкиваться с ошибкой: «ошибка C2100: недопустимое косвенное обращение» (Visual C ++ 2008). Я считаю, что разыменовываю итератор неправильно; Есть ли лучший способ сделать это?

0

Решение

*itr->name эквивалентно (*itr)->name,

В вашем коде тип (*itr) является playerне player*Таким образом, компилятор в основном говорит вам, что вы пытаетесь разыменовать что-то, что не является указателем.

Правильный способ сделать это будет (*itr).name или же itr->name, оба означают «разыменование itr затем имя доступа».

4

Другие решения

Я считаю, что разыменовываю итератор неправильно;

Смотрите исправленный код:

if (playerName.compare(itr->name) == 0)

или же

if (playerName.compare((*itr).name) == 0)
2

По вопросам рекламы [email protected]