0

繰り返したいベクトルプレーヤーがあります。'player'構造体は次のように表示されます。

struct player { string name; int rating; };

forループでイテレータを使用して、「players」のいずれかに「playerName」(文字列)という名前が付いているかどうかを確認しています。

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

残念ながら、「エラーC2100:不正な間接参照」(ビジュアルC ++ 2008)というエラーが発生し続けます。イテレータを誤って逆参照していると思います。そうするためのより良い方法はありますか?

4

2 に答える 2

4

*itr->nameと同等(*itr)->nameです。

あなたのコードでは、の型は(*itr)is player, notplayer*であるため、コンパイラは基本的に、ポインターではないものを逆参照しようとしていることを伝えています。

これを行う正しい方法は(*itr).nameoritr->nameで、どちらも「itr を逆参照してから名前にアクセスする」ことを意味します。

于 2012-11-20T03:43:28.070 に答える
2

イテレータを誤って逆参照していると思います。

修正されたコードを参照してください。

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

また

if (playerName.compare((*itr).name) == 0)  
于 2012-11-20T03:25:47.410 に答える