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, вероятно, должен быть вашей первой линией защиты.:-)

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

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

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

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

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

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

Потому что имя функции for_eachPS Я думал, что это вопрос 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 отключен.

Другие вопросы по тегам