Подтвердить что ты не робот

Foreach не распознается в С++

В моей книге cs106b мы используем выражение "foreach" , чтобы просмотреть список слов на карте. Я реализовал код и ударил головой о стену, сталкиваясь с таинственными ошибками. Здесь код:

   void DisplayWordCounts(Map<int> & wordsCount) {
     foreach (string word in wordsCount) {
        cout << left << setw(15) << word << right << setw(5)
        << wordsCount[word] << endl;
     }
}

в строке, начинающейся с "foreach" , я получаю следующие ошибки: lesson4-macbeth/life.cpp: 58: ошибка: ожидаемое первичное выражение перед словом ' lesson4-macbeth/life.cpp: 58: ошибка: "foreach" не был объявлен в этой области lesson4-macbeth/life.cpp: 58: ошибка: ожидается `; ' перед '{' токеном

Я предполагаю, что foreach не распознается. В этом случае, как я могу просмотреть список элементов из класса Map?

4b9b3361

Ответ 1

foreach не является стандартной функцией C++. Это было то, что мы с Эриком Робертсом разработали для вводной последовательности программирования в Стэнфорде, и это предшествовало более современному C++ 11 диапазонному циклу for. Теперь, когда поддержка компилятора C++ 11 стала более распространенной, мы прекратили использовать foreach и просто решили использовать стандартную C++, улучшенную for цикла.

Я бы вообще не советовал использовать foreach будущем, так как он нестандартный. Однако, если вы компилируете старый код, который его использует, вам нужно будет включить один из заголовочных файлов из библиотек Стэнфорда C++, который его определяет.

Ответ 2

Я предлагаю for_each.

Ответ 3

Какую книгу вы используете?

foreach не является ключевым словом С++, и я думаю, что ближайшее расширение, которое вводит его, с этим конкретным синтаксисом, в язык находится в Visual С++, как описано в этой ссылке: http://blogs.msdn.com/b/arich/archive/2004/09/08/227139.aspx

В <algorithm> есть for_each, но его подпись сильно отличается от того, что вы используете (что очень синтаксис Java для каждого).

Также я заметил, что вы используете Map, который отличается от std::map?

Ответ 4

Поскольку имя функции for_each Постскриптум Я думал, что это вопрос на С++, как предложил тег, но синтаксис для С++ неверен.

Ответ 5

foreach не является конструкцией в С++!

Ответ 6

foreach не существует в С++.

В последней версии С++, которая только что была выпущена в некоторых из последних компиляторов, вы можете использовать "Range-based for-loop". Найдите ее на этой странице: http://en.wikipedia.org/wiki/C%2B%2B0x

Я сомневаюсь, что ваш компилятор поддерживает это. Итак, возможно, придерживайтесь цикла for.

Ответ 7

Попробуйте выполнить итерацию по размеру карты.

for(int i=0;i<MAP.size();++i)
    // something with MAP.at(i);

Замените MAP на свой объект карты.

Удачи!

С уважением,
Деннис М.

Ответ 8

Код в вашем примере выглядит как сочетание синтаксиса С# и С++. Самой конструкцией foreach является синтаксис С#, С++/CLI (поддерживается VС++) имеет для каждой конструкции, как и С++ 0x (поддерживается GCC 4.6), но не соответствует этому синтаксису.

Ответ 9

Qt является поддержкой foreach, используя следующее:

QDir dir("Dir");
dir=QFileDialog::getExistingDirectory(0,"Select Folder: ");
QFileInfoList list = dir.entryInfoList(QDir::Dirs| QDir::Files | QDir::NoDotAndDotDot);

std::vector<std::string> names;
foreach(QFileInfo finfo, list){
    std::string str=dir.path().toStdString().c_str();
    str=str+"/";
    names.push_back(str+finfo.fileName().toStdString().c_str());
}

но при использовании #define QT_NO_KEYWORDS в файле заголовка foreach отключен.