Использование оператора запятой

Возможный дубликат:
Можно ли объявить две переменные разных типов в цикле for?

Рассмотрим этот код:

for( std::vector<std::string>::iterator it = myVec.begin(), int i = 3; it < myVec.end(); it++, i++ )
{
// some operations with the vector
}

Я очень удивился, что MSVC 2010 дал мне ошибки при компиляции цикла for.
Использование оператора запятой запрещено MSVS?

Вот ошибка:

error C2062: type 'int' unexpected
error C2143: syntax error: missing ';' before ')'

Если я попытаюсь вытолкнуть определение «int i» из цикла, я получу:

error C2440: 'initializing': cannot convert from 'int' to 'std::vector'

2

Решение

оператор запятой должно быть два выражения как операнды. На правой стороне у вас есть int i=0 который выглядит как декларация, не выражение.

Если вы удалите это intВы объявляете std::vector<std::string>::iterator переменная с именем i и назначая или конструируя его с 3 который не проверяет тип.

На практике переместите int i=3; объявление до (и из) вашего for петля.

7

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

Вы не можете иметь объявление для двух разных типов данных в цикле for, поэтому вам нужно поместить вектор или i в цикл, но вы можете присвоить значения

0