#include <string>
#include <map>
#include <fstream>
#include <iostream>
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] << "не может быть открыт \n";
}
// В следующей строке в возникает ошибка 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.)
Выбирайте: либо выражение, либо объявление. Перемешать выражение с объявлением вот так вот в лоб, как у вас, не получится.
for (string Value, Read[I] >> Value; !Read[I].eof(); Read[I] >> Value) {
Да, так нельзя, потому что Read[I] >> Value
- это не объявление переменной.
Можно так:
for (string Value; Read[I] >> Value, !Read[I].eof(); ) {
В коде баг и нужно так:
for (string Value; Read[I] >> Value; ) {
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый деньПытаюсь решить одну задачу, надо, чтобы читались данные из файла
Есть задача: вводится просто строка с цифрами и пробелами и задача вычленить из неё цифры для последующих с ними манипуляций(желательно в int)Например...
Где в VS можно указать версию приложения или библиотеки разработанной на С++?