foreach не распознается в C ++ - PullRequest
3 голосов
/ 22 января 2011

В моей книге 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 ]

8 голосов
/ 22 января 2011

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

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

6 голосов
/ 22 января 2011

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

3 голосов
/ 22 января 2011

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

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

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

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

2 голосов
/ 22 января 2011

foreach - это , а не конструкция в C ++!

2 голосов
/ 22 января 2011

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

1 голос
/ 22 января 2011

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

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

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

0 голосов
/ 08 ноября 2013

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 отключается.

0 голосов
/ 22 января 2011

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

0 голосов
/ 22 января 2011

Попробуйте перебрать размер карты.

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

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

Удачи!

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...