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?
Ответы
Ответ 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
отключен.