您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 新手求助:一个关于<未解决的重载函数类型>的问题

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

来源:网络整理     时间:2016/9/2 4:10:42     关键词:

关于网友提出的“ 新手求助:一个关于<未解决的重载函数类型>的问题”问题疑问,本网通过在网上对“ 新手求助:一个关于<未解决的重载函数类型>的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 新手求助:一个关于<未解决的重载函数类型>的问题
描述:

#include 
#include 
#include 
#include 
using namespace std;
void write(const string& s){
cout << s << '\n';
}
int main(){
vector 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<> >::iterator, std::vector<> >::iterator, <未解决的重载函数类型>)’的调用没有匹配的函数
list.cpp:24:40: 附注: 备选是:
/usr/include/c++/4.6/bits/stl_algo.h:4373:5: 附注: template _Funct std::for_each(_IIter, _IIter, _Funct)
补充参考:将write函数改名为print以后可以通过并且结果正确。。。
想知道那个错误具体是出在了什么地方。预先谢谢了。
解决方案1:

标准库头文件包含关系错综复杂,我会告诉你下面几行代码在我的Redhat上可以正常编译运行么?


#include 
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的前置声明文件
... 解决方案2:

名字空间啊名字空间,尽量不要污染全局匿名空间

解决方案3:

在eclipse加cdt上运行未发现错误!


以上介绍了“ 新手求助:一个关于<未解决的重载函数类型>的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3714796.html

相关图片

相关文章