2009-08-06 46 views
3

我在兩臺不同的機器上編譯了我的代碼,我認爲這兩臺機器的設置完全相同。但是,一個編譯沒有問題,另一個給出以下錯誤。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

一個可能的問題是,第一編譯器想要一個using namespace std;允許使用未修飾的標識符從命名空間(如for_each)之前,而第二個是過度寬鬆,不要求它。

當然,如其他的答案和評論激烈指出,有可能是,優選的替代品,如顯式拼寫它std::for_each在每次出現時,或採用使用聲明using std::for_each;)而不是更廣泛使用指令using namespace std;) - 但這個(好的)建議不是對你爲什麼一個編譯器會診斷錯誤而另一個沒有的問題的迴應;-)。

+0

是的,我剛剛意識到這一點,它解決了這個問題。 – Justin 2009-08-06 15:33:04

+0

使用命名空間標準!來吧! – DanDan 2009-08-06 15:34:19

+5

使用命名空間std是邪惡的 - 誰知道你什麼時候會遇到名稱衝突? – bdonlan 2009-08-06 15:35:38

12

嘗試std::for_each()代替。也許它不能看到命名空間。