Почему я не могу перебрать вектор с помощью цикла for на основе диапазона C ++ 11?

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

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

затем получить сообщение об ошибке говорит, что «авто» изменил значения в c ++ 11, удалите его!

поэтому я изменяю это так:

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

Затем появилось сообщение об ошибке «циклы на основе диапазона» в режиме C ++ 98 не разрешены »

Полностью запутался, как это повторить ??

Любой, почему когда-то это C ++ 11, а иногда это C ++ 98?

0

Решение

Похоже, вам нужно установить компилятор в режим C ++ 11. Сообщение об ошибке:

циклы for для диапазона не допускаются в режиме C ++ 98

указывает на это.

То, как вы это сделаете, зависит от вашего компилятора.

Когда вы видите это сообщение:

появляется ошибка говорит о том, что «авто» изменило значения в с ++ 11

Ваш компилятор все еще находится в режиме C ++ 98/03. Ключевое слово auto существует в C ++ 03, но в большинстве случаев не имеет смысла, потому что по умолчанию переменные входят в автоматическое хранилище. (Вы можете заставить переменную перейти в статическое хранилище, пометив ее static, То есть, auto это к static как signed это к unsigned (на С ++ 98/03).

Поскольку это значение не очень полезно в C ++ 98/03, и поскольку значение изменяется в C ++ 11, компилятор в режиме C ++ 03 может жаловаться на использование auto с предупреждением. Если вы воспринимаете предупреждения как ошибки, то это превращается в ошибку. Таким образом, сообщение, которое вы видите.

5

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

Как я должен сделать итерацию в режиме c ++ 98?

Или

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);
}
2