新手一个关于<未解决的重载函数类型>的有关问题

新手求助:一个关于<未解决的重载函数类型>的问题
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

void write(const string& s){
cout << s << '\n';
}

int main(){
vector<string> lst;

string s = "knife";
lst.push_back(s);

s = "fork";
lst.push_back(s);

s = "spoon";
lst.push_back(s);

for_each(lst.begin(), lst.end(), write);//这里是出错的地方。
}


这是一个C++ CookBook里的例子程序。
但g++编译通不过。给出的信息如下:

list.cpp: 在函数‘int main()’中:
list.cpp:24:40: 错误: 对‘for_each(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, <未解决的重载函数类型>)’的调用没有匹配的函数
list.cpp:24:40: 附注: 备选是:
/usr/include/c++/4.6/bits/stl_algo.h:4373:5: 附注: template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)


补充参考:将write函数改名为print以后可以通过并且结果正确。。。

想知道那个错误具体是出在了什么地方。预先谢谢了。

------解决方案--------------------
在eclipse加cdt上运行未发现错误!
------解决方案--------------------
名字空间啊名字空间,尽量不要污染全局匿名空间
------解决方案--------------------
标准库头文件包含关系错综复杂,我会告诉你下面几行代码在我的Redhat上可以正常编译运行么?

#include <iostream>
using namespace std;

int main()
{
write(0, 0, 0);
string s = "";   // 没错,就是标准库的string,我可没有直接包含
cout << s << endl;
return 0;
}

追踪了一下include,下面是部分包含次序,追到最后居然又回来了。。。你有兴趣的话,慢慢查吧。或者写个脚本来搜索。
iostream
ostream
ios
bits/basic_ios.h
bits/locale_facets.h
bits/ios_base.h
bits/locale_classes.h
string                   // 哈哈,出现了
memory
bits/stl_algobase.h
iosfwd                   // 我勒个去,居然又回到了io的前置声明文件
...