2011-01-21 29 views
3

私のcs106bの本では、 "foreach"という表現を使用してマップ内の単語のリストを調べます。私はコードを実装し、不思議な誤りに直面している壁に向かって頭を叩いた。ここでは、コードです:ライン上の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:ERROR: '単語' lesson4-マクベス前に、プライマリ表現予想します/life.cpp:58:エラー: 'foreach'はこのスコープで宣言されていません lesson4-macbeth/life.cpp:58:error:予期した `; ' before '{' token

foreachが認識されないようです。その場合、Mapクラスのアイテムのリストをどのように調べることができますか?

+8

この本の名前を教えてください。 – jmucchiello

+0

C++でC#コードをコンパイルしようとしていますか? –

+2

@ Everyone-これは、スタンフォードの入門プログラミングコースCS106BおよびCS106Xで提供される特別なマクロです。また、STL 'map'よりも使いやすいカスタム' Map'クラスも提供しています。したがって大文字。 – templatetypedef

答えて

7

foreachは標準のC++機能ではありません。私は実際にEric RobertsがCS106B/Xの実装をまとめたのを手助けしました。もしあなたが#include "foreach.h"ならばそれを使用できるはずです。興味があれば、私はあなたにファイルのソースコードを送信しようとすることができます。

また、スタックオーバーフローを検出するための小道具!あなたのSLは、おそらくあなたの最初の防御線であるはずです。 :-)

+0

私は不思議です。標準的なC++の構造に何が問題でしたか? –

+1

@Oli Charlesworth- C++には何も問題がありませんでした。主な利点はシンプルさでした。複雑なイテレーター構文を導入して地図/セット/などのすべてを見る必要がない場合は、再帰、リンクリスト、グラフ、漸近分析などの高度なアイデアに集中する方がはるかに簡単です。カリキュラムはコース終了時にSTLコンテナーを通過するようにすぐに更新されるでしょう。つまり、「foreach」は材料を簡素化するために「トレーニングホイール」になるでしょう。 – templatetypedef

+0

あなたはなぜこのような邪悪なことをしたでしょうか?あなたがそのような構造を教えたいのであれば、それを直接サポートする言語を使わないでください。実際にC言語を使う必要があるのに直面していたCSの卒業生がBEGINとENDを#define {と}して、そのコードをもう少しパスカルのようにすることを思い出させます! – Clifford

2

機能名はfor_each です。タグが示唆しているように、C++の質問だと思っていましたが、C++では構文がすべて間違っていました。

+1

それはそうです。しかし、あなたはそのように使うことはできません。 –

2

foreachはではありません。 C++の構造体です!

0

地図のサイズを反復してみてください。

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

MAPをマップオブジェクトに置き換えます。

幸運を祈る!

よろしく、
デニスM.

+0

イテレータを使用するとforeach構文に近い一致が得られますが、構文は多分面倒です。 – Clifford

+0

マップはそのように索引付けされていません。イテレータを使用します。 –

1

のforeachは、C++には存在しません。 http://en.wikipedia.org/wiki/C%2B%2B0x

が、私はそれにもかかわらず疑う:だけちょうど、あなたが使用することができ、最新のコンパイラの一部で放出されるC++の最新バージョンで

..このページにそれを見つける「forループ範囲ベース」コンパイラがそれをサポートしています。ですから、今のところforループをつけておくとよいでしょう。

3

どのような本をお使いですか?

foreachは、C++のキーワードではない、と私は言語に、その具体的な構文で、それを紹介し、最も近い拡張子は、このリンクで説明したように、ビジュアルC++であると思う:http://blogs.msdn.com/b/arich/archive/2004/09/08/227139.aspx

<algorithm>for_eachがありますそのシグネチャは使用しているシグネチャとは非常に異なります(これはそれぞれの構文では非常にJavaです)。

またMapstd::mapとは異なることがわかりましたか?

0

あなたの例のコードは、C#とC++の構文が混在しているようです。 foreachコンストラクト自体はC#構文で、C++/CLI(VC++でサポート)はC++ 0x(GCC 4.6でサポート)と同様に各構文に対してaを持ちますが、その構文に従うものではありません。

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無効:

-1

Qtは、次のように使用して、サポートforeachです。

関連する問題