2011-01-21 37 views
3

在我的cs106b書中,我們使用表達式「foreach」來查看Map中的單詞列表。我實施了這些代碼,並將我的頭撞向了面對神祕錯誤的牆壁。下面的代碼:foreach在C++中不被識別

void DisplayWordCounts(Map<int> & wordsCount) { 
    foreach (string word in wordsCount) { 
     cout << left << setw(15) << word << right << setw(5) 
     << wordsCount[word] << endl; 
    } 
} 

上開始「的foreach」我收到以下錯誤行: lesson4 - 麥克白/ life.cpp:58:錯誤:「字」 lesson4 - 麥克白之前預期基本表達式/ life.cpp:58:錯誤:'foreach'未在此範圍內聲明 lesson4-macbeth/life.cpp:58:error:expected';'在'{'標記之前

我想foreach不被識別。在那種情況下,我如何瀏覽Map類中的項目列表?

+8

請告訴我們這本書的名字,以便我們可以更好地避免它。 – jmucchiello 2011-01-21 23:23:15

+0

你想在C++中編譯c#代碼嗎? – 2011-01-21 23:23:39

+2

@每個人 - 這是斯坦福大學的入門編程課程CS106B和CS106X中提供的一個特殊宏。我們還提供了比STL`map`更容易使用的自定義`Map`類;因此是大寫字母。 – templatetypedef 2011-01-21 23:27:37

回答

7

foreach不是標準的C++功能。我實際上幫助Eric Roberts整理了CS106B/X的實現,如果你使用#include "foreach.h",你應該可以使用它。如果您好奇,我可以嘗試向您發送文件的源代碼。

此外,查找堆棧溢出的道具!雖然你的SL應該可能是你的第一道防線。 :-)

2

因爲函數名稱是for_each P.S.我認爲這是一個C++問題,如標籤所示,但C++的語法都是錯誤的。

2

foreach是不是在C++中的構造!

0

嘗試遍歷地圖的大小。

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

將MAP替換爲您的地圖對象。

祝你好運!

問候,
丹尼斯M.

1

的foreach不存在C++。

在其剛剛發佈了一些最新的編譯器,你可以使用C++的最新版本的「基於範圍的for循環」 ..發現此頁面上:http://en.wikipedia.org/wiki/C%2B%2B0x

我懷疑儘管這你的編譯器支持。所以,也許現在堅持一個for循環。

3

你在用什麼書?

foreach是不是C++的關鍵字,我認爲引入了它,與特定的語法,到語言最接近的擴展是在Visual C++,因爲在這個環節中描述:http://blogs.msdn.com/b/arich/archive/2004/09/08/227139.aspx

for_each<algorithm> ,但是它的簽名與你正在使用的非常不同(這是一種非常適合每種語法的Java)。

另外我注意到你使用Map這是不同於std::map

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