在我的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类中的项目列表?
foreach
不是标准的C ++功能。这是Eric Roberts和我为Stanford入门编程序列开发的东西,早于更现代的C ++ 11基于范围的for循环。既然C ++ 11编译器支持更广泛,我们已经停止使用foreach
并且只选择使用标准的C ++增强型for
循环。
我一般不建议使用foreach
,因为它是非标准的。但是,如果您正在编译使用它的旧代码,则需要包含定义它的one of the header files from the Stanford C++ Libraries。
我建议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
不同?
因为函数名是for_each
P.S.我认为这是一个c ++问题,正如标签所暗示的那样,但C ++的语法都是错误的。
foreach不是C ++中的构造!
foreach在C ++中不存在。
在最新版本的C ++中,只是在一些最新的编译器中发布,你可以使用“基于范围的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。
祝好运!
问候, 丹尼斯·M
您的示例中的代码看起来像是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
被禁用。