简体   繁体   中英

problems using STL std::transform from cygwin g++

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().

This explains it quite well.

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM