foreach не распознается в C++
В моей книге 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?
9 ответов
foreach
не является стандартной функцией C++. Я фактически помог Эрику Робертсу собрать реализацию для CS106B/X, и вы сможете использовать ее, если #include "foreach.h"
, Если вам интересно, я могу попробовать отправить вам исходный код файла.
Кроме того, реквизит для поиска переполнения стека! Хотя ваш SL, вероятно, должен быть вашей первой линией защиты.:-)
Какую книгу вы используете?
foreach
не является ключевым словом C++, и я думаю, что самое близкое расширение, которое вводит его с этим конкретным синтаксисом в язык, находится в Visual C++, как описано в этой ссылке: http://blogs.msdn.com/b/arich/archive/2004/09/08/227139.aspx
Есть for_each
в <algorithm>
, но его сигнатура очень отличается от того, что вы используете (это очень синтаксис Java для каждого).
Также я заметил, что вы используете Map
который отличается от std::map
?
Потому что имя функции for_each
PS Я думал, что это вопрос C++, как и предполагал тег, но синтаксис для C++ неверен.
foreach не существует в C++.
В последней версии C++, которая только что выпущена в некоторых из последних компиляторов, вы можете использовать "Range-based for-loop" .. найти его на этой странице: http://en.wikipedia.org/wiki/C%2B%2B0x
Я сомневаюсь, что ваш компилятор это поддерживает. Так что, возможно, придерживайтесь цикла for.
Попробуйте перебрать размер карты.
for(int i=0;i<MAP.size();++i)
// something with MAP.at(i);
Замените MAP на ваш объект карты.
Удачи!
С Уважением,
Деннис М.
Код в вашем примере выглядит как смесь синтаксиса C# и C++. Сама конструкция foreach имеет синтаксис C#, C++/CLI (поддерживаемый VC++) имеет для каждой конструкции свойство, как и C++0x (поддерживаемый GCC 4.6), но ни тот, ни другой не следуют этому синтаксису.
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
отключен.