I am running g++(gcc version 3.4.4) on cygwin.
I can't get this small snippet of code to compile. I included the appropriate headers.
int main(){
std::string temp("asgfsgfafgwwffw");
std::transform(temp.begin(),
temp.end(),
temp.begin(),
std::toupper);
std::cout << "result:" << temp << std::endl;
return 0;
}
I have not had any issues using STL containers such as vector. Does anyone have any suggestions or insights into this situation. Thanks.
From the link above .
#include <cctype> // for toupper #include <string> #include <algorithm> using namespace std; void main() { string s="hello"; transform(s.begin(), s.end(), s.begin(), toupper); }
Alas, the program above will not compile because the name 'toupper' is ambiguous. It can refer either to:
int std::toupper(int); // from <cctype>
or
template <class chart> charT std::toupper(charT, const locale&);// from <locale>
Use an explicit cast to resolve the ambiguity:
std::transform(s.begin(), s.end(), s.begin(), (int(*)(int)) toupper);
This will instruct the compiler to choose the right toupper().
Which will boil down to this code:
std::transform(temp.begin(),temp.end(),temp.begin(),static_cast<int (*)(int)>(std::toupper));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.