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

205
24 октября 2017, 02:39
#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();
    }
}
Answer 1

В синтаксисе for

    for ( init-statement conditionopt ; expressionopt ) statement

первая часть - init-statement - является либо выражением, либо объявлением.

Вы изначально использовали синтаксис string Value, [...], который явно говорит, что в вашем случае в качестве init-statement вы хотите использовать именно объявление, а не выражение. Однако дальнейший синтаксис [...], Read[I] >> Value не является корректным синтаксисом объявления. Отсюда и ошибка.

(Странно, что вы в своем вопросе называете эту часть синтаксиса for "init-expression", хотя в вашем же примере это никакой не expression.)

Выбирайте: либо выражение, либо объявление. Перемешать выражение с объявлением вот так вот в лоб, как у вас, не получится.

Answer 2
for (string Value, Read[I] >> Value; !Read[I].eof(); Read[I] >> Value) {
  1. Да, так нельзя, потому что Read[I] >> Value - это не объявление переменной.

  2. Можно так:

    for (string Value; Read[I] >> Value, !Read[I].eof(); ) {
    
  3. В коде баг и нужно так:

    for (string Value; Read[I] >> Value; ) {
    
READ ALSO
Ошибка при подключении файла

Ошибка при подключении файла

Добрый деньПытаюсь решить одну задачу, надо, чтобы читались данные из файла

358
Необычный ввод строки [требует правки]

Необычный ввод строки [требует правки]

Есть задача: вводится просто строка с цифрами и пробелами и задача вычленить из неё цифры для последующих с ними манипуляций(желательно в int)Например...

369
Версия приложения VS C++

Версия приложения VS C++

Где в VS можно указать версию приложения или библиотеки разработанной на С++?

210