最近在折腾HPUX, aCC有一些比较严格的校验,比方说
transform(strTest.begin(), strTest.end(), strTest.begin(), toupper);
编译不通过,报如下错误:
"transform.cpp", line 34: error #2304: no instance of overloaded function
"transform" matches the argument list
argument types are: (char *, char *, char *, <unknown-type>)
transform(strTest.begin(), strTest.end(), strTest.begin(), toupper);
将代码做如下改动后,编译就通过了:
transform(strTest.begin(), strTest.end(), strTest.begin(), ::toupper);
初步怀疑是函数做为参数传递时,要显式指明是全局的。
全量程序如下:
#include <stdio.h>
#include <ctype.h>
#include <string>
#include <algorithm>
#include <iostream.h>
using std::string;
void test_transform()
{
std::string sAttr = "abc" ;
transform(sAttr.begin(), sAttr.end(), sAttr.begin(),::toupper);
printf("sAttr: %s\n", sAttr.c_str());
}
int main()
{
printf("Hello World!\n");
test_transform();
return 0;
}
输出:
HB-ABM-A:[/home/ocs/user/kyp]$ ./a.out
Hello World!
sAttr: ABC