2009-08-06 40 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()代替。也许它不能看到命名空间。