У меня есть векторные плееры, которые я хотел бы повторить. Структура ‘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). Я считаю, что разыменовываю итератор неправильно; Есть ли лучший способ сделать это?
*itr->name
эквивалентно (*itr)->name
,
В вашем коде тип (*itr)
является player
не player*
Таким образом, компилятор в основном говорит вам, что вы пытаетесь разыменовать что-то, что не является указателем.
Правильный способ сделать это будет (*itr).name
или же itr->name
, оба означают «разыменование itr затем имя доступа».
Я считаю, что разыменовываю итератор неправильно;
Смотрите исправленный код:
if (playerName.compare(itr->name) == 0)
или же
if (playerName.compare((*itr).name) == 0)