0
std::vector<std::string> endpointLSRKey;

for(auto it = endpointLSRKey.begin(); it != endpointLSRKey.end(); ++it) {
        lsr->setItem(0, "", *it, address);
    }

次に、「auto」がc ++ 11で意味を変更したというエラーが表示されたら、削除してください!

だから私はそれを次のように変更します:

for(std::string& str : endpointLSRKey){
        lsr->setItem(0, "", str, address);
    }

次に、「範囲ベースの 'for' ループは C++98 モードでは許可されていません」というエラーが表示されました。

完全に混乱しています。どのように繰り返すのですか??

c++11 の場合と c++98 の場合があるのはなぜですか?

4

2 に答える 2

5

コンパイラを C++11 モードに設定する必要があるようです。エラーメッセージ:

「範囲ベースの 'for' ループは C++98 モードでは許可されていません」

はこれを指摘します。

これを行う方法は、コンパイラによって異なります。

このメッセージが表示された場合:

「auto」がc ++ 11で意味を変更したというエラーが表示されます

コンパイラはまだ C++98/03 モードです。このキーワードautoは C++03 にも存在しますが、デフォルトでは変数が自動ストレージに格納されるため、ほとんどの場合意味がありません。(変数を でマークすることにより、変数を静的ストレージに入れることができますstatic。つまり、そのままautoです( C++98/03)。staticsignedunsigned

この意味は C++98/03 では実際には有用ではなく、C++11 では意味が変わるため、C++03 モードのコンパイラは の使用についてauto警告を発する可能性があります。警告をエラーとして扱うと、エラーになります。したがって、あなたが見ているメッセージ。

于 2013-01-09T17:57:49.750 に答える
2

c++98mode で反復を行うにはどうすればよいですか?

また

for(std::vector<std::string>::iterator it = endpointLSRKey.begin(); it != endpointLSRKey.end(); ++it) {
    lsr->setItem(0, "", *it, address);
}

また

for(std::size_t i = 0; i < endpointLSRKey.size(); ++i) {
    lsr->setItem(0, "", endpointLSRKey[i], address);
}
于 2013-01-09T18:02:20.210 に答える