Страницы

Поиск по вопросам

четверг, 4 апреля 2019 г.

Несколько init-expression в for

#include #include #include #include
using namespace std;
int Search(string* Array, int Size, string* Words) { ifstream *Read = new ifstream[Size];
for (int I = 0; I < Size; I++) { Read[I].open(Array[I]); if (!Read[I]) { cout << "Файл с именем: " << Array[I] << "не может быть открыт
"; } // В следующей строке в возникает ошибка I должно иметь константное значение //Ошибки нет, если "string Value" вынести из цикла //Почему возникает ошибка ? for (string Value, Read[I] >> Value; !Read[I].eof(); Read[I] >> Value) { // Что-то делающий код }
}
for (int I = 0; I < Size; I++) { Read[I].close(); } }


Ответ

В синтаксисе for
    for ( init-statement conditionopt ; expressionopt ) statement
первая часть - init-statement - является либо выражением, либо объявлением.
Вы изначально использовали синтаксис string Value, [...], который явно говорит, что в вашем случае в качестве init-statement вы хотите использовать именно объявление, а не выражение. Однако дальнейший синтаксис [...], Read[I] >> Value не является корректным синтаксисом объявления. Отсюда и ошибка.
(Странно, что вы в своем вопросе называете эту часть синтаксиса for "init-expression", хотя в вашем же примере это никакой не expression.)
Выбирайте: либо выражение, либо объявление. Перемешать выражение с объявлением вот так вот в лоб, как у вас, не получится.

Комментариев нет:

Отправить комментарий