关于stl中transfrom使用时编译错误问题
在codeblocks13.12编译器环境下,使用stl中的transfrom过程中一直提示编译失败,代码如下:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
//编译器环境codeblocks 13.12
int main()
{
//转换...........
string s3 = "AAabbbccc";
cout<< s3 <<endl;
//这样写编译器会一直报错
transform(s3.begin(),s3.end(),s3.begin(),toupper);
//改成这样就ok了
//transform(s3.begin(),s3.end(),s3.begin(),::toupper);
cout<< s3 <<endl;
return 0;
}
后来在网上找原因发现一个大神的原因讲解,说有三种修改方法,我只试了第一个方法编译通过:
有三种解决方法:
1.因为在全局命名空间中有实现的函数(而不是宏),所以我们明确命名空间,这并不是总奏效,但是在我的g++环境中没有问题:
transform(str.begin(), str.end(), str.begin(), ::toupper);
2.自己写一个函数出来—wraper
inline char charToUpper(char c)
{
return std::toupper(c);
}
3.强制转化:将toupper转换为一个返回值为int,参数只有一个int的函数指针
transform(str.begin(), str.end(), str.begin(), (int (*)(int))toupper);