0

C++ で反復子内の構造体要素にアクセスしようとしていますが、コンパイラは構造体にその要素が含まれていないというエラーを表示します。私は次のことをしようとしています:

typedef struct
{
   string str;
   int frequenzy;
} word;

bool isPresent = false;

for(std::vector<word>::iterator itr=words.begin(); itr!=words.end(); ++itr)
{
   if(*itr.str.compare(currentWord)==0){
    isPresent = true;
    *itr.frequenzy++;
    }
}

次のメッセージが表示されます。

lab7.cc: In function 'int main()':
lab7.cc:27:13: error: 'std::vector<word>::iterator' has no member named 'str'
lab7.cc:29:11: error: 'std::vector<word>::iterator' has no member named 'frequen
zy'

なぜこれが不可能なのですか?

4

1 に答える 1

6

おそらく、forループの本体を次のように書き直す必要があります。

if (itr->str.compare(currentWord)==0)
//     ^^
{
    isPresent = true;
    itr->frequenzy++;
//     ^^
}

演算子は、演算子.よりも優先され*ます。したがって、これら 2 つの演算子を本当に使用したい場合は、上記を次のように書き換える必要があります。

if ((*itr).str.compare(currentWord)==0)
//  ^^^^^^^
{
    isPresent = true;
    (*itr).frequenzy++;
//  ^^^^^^^
} 
于 2013-03-17T18:02:10.480 に答える