2009-08-06 2 views
3

私は2つの異なるマシンで自分のコードをコンパイルしましたが、私は同じ設定があると思いました。しかし、問題なくコンパイルすると、もう一方は次のエラーを出します。for_each()in C++

LogEventReader.cpp(320) : error C3861: 'for_each': identifier not found, even with argument-dependent lookup 

関連するコード:

#include <algorithm> 
... 
for_each(messages.begin(), messages.end(), processXMLMessage); 

問題は何ができるか任意のアイデア? TIA。

答えて

10

第1のコンパイラは、using namespace std;がその名前空間(例えばfor_each)からデコレートされていない識別子の使用を許可することを望んでいるが、第2のコンパイラは過剰許容であり要求しない。もちろん

他の回答とコメント熱く指摘したように、このような明示的出現ごとにstd::for_eachそれを綴り、またはその代わり広いの宣言using std::for_each;)を用いを用いたとして、おそらく、好ましい選択肢は、ありますディレクティブusing namespace std;)を使用していますが、この(良い)アドバイスは、あるコンパイラがエラーを診断する理由についてのあなたの質問に対する回答ではありません;-)。

+0

うん、私はそれを認識し、問題を修正しました。 – Justin

+0

名前空間を使用してstd!いい加減にして! – DanDan

+5

名前空間を使用してstd悪です - あなたは名前の衝突を取得するのを誰が知っていますか? – bdonlan

12

try std::for_each()おそらく、名前空間を見ることはできません。