foreach在C ++中无法识别

问题描述 投票:3回答:9

在我的cs106b书中,我们使用表达式“foreach”来浏览Map中的单词列表。我实施了这些代码,并将我的头撞在了面临神秘错误的墙上。这是代码:

   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:错误:在'word'之前预期的primary-expression lesson-macbeth / life.cpp:58:错误:'foreach'是未在此范围内声明lesson4-macbeth / life.cpp:58:错误:预期`;'在'{'之前

我想foreach不被认可。在这种情况下,我如何查看Map类中的项目列表?

c++ foreach
9个回答
8
投票

foreach不是标准的C ++功能。这是Eric Roberts和我为Stanford入门编程序列开发的东西,早于更现代的C ++ 11基于范围的for循环。既然C ++ 11编译器支持更广泛,我们已经停止使用foreach并且只选择使用标准的C ++增强型for循环。

我一般不建议使用foreach,因为它是非标准的。但是,如果您正在编译使用它的旧代码,则需要包含定义它的one of the header files from the Stanford C++ Libraries


6
投票

我建议for_each


3
投票

你用的是什么书?

foreach不是C ++关键字,我认为使用该特定语法将其引入该语言的最接近的扩展是在Visual C ++中,如此链接所述:http://blogs.msdn.com/b/arich/archive/2004/09/08/227139.aspx

for_each中有<algorithm>,但它的签名与你正在使用的非常不同(这是一种非常适合Java的语法)。

另外我注意到你使用的Mapstd::map不同?


2
投票

因为函数名是for_each P.S.我认为这是一个c ++问题,正如标签所暗示的那样,但C ++的语法都是错误的。


2
投票

foreach不是C ++中的构造!


1
投票

foreach在C ++中不存在。

在最新版本的C ++中,只是在一些最新的编译器中发布,你可以使用“基于范围的for-loop”..在这个页面上找到它:http://en.wikipedia.org/wiki/C%2B%2B0x

我怀疑你的编译器是否支持它。所以,也许现在坚持使用for循环。


0
投票

尝试迭代地图的大小。

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

用地图对象替换MAP。

祝好运!

问候, 丹尼斯·M


0
投票

您的示例中的代码看起来像是C#和C ++语法的混合。 foreach构造本身是C#语法,C ++ / CLI(由VC ++支持)对于每个构造都有一个C ++ 0x(由GCC 4.6支持),但是没有跟随该语法。


-1
投票

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被禁用。

© www.soinside.com 2019 - 2024. All rights reserved.