您的位置:首页 > 其它

关于stl中transfrom使用时编译错误问题

2017-09-24 12:08 218 查看

关于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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐