C++ error:no matching function for call to transform

dev C++ error:Id returned 1 exit status
C++ error:no matching function for call to transform
C++ error: invalid types for array subscript

報錯

1
2
3
4
5
6
int main ()
{
string str = "Hello";
transform (str.begin (), str.end (), str.begin (), ::toupper);
cout << str;
}

報錯:no matching function for call to transform

有三種解決方法:

1. 因為在全域性名稱空間中有實現的函式(而不是巨集),所以我們明確名稱空間,這並不是總奏效,但是在我的 g++ 環境中沒有問題:

1
transform (str.begin (), str.end (), str.begin (), ::toupper);

2. 自己寫一個函數出來 —wraper

1
2
3
4
inline char charToUpper (char c) 
{
return std::toupper (c);
}

3. 強制轉化:將 toupper 轉換為一個返回值為 int,引數只有一個 int 的函數指標。

1
transform (str.begin (), str.end (), str.begin (), (int (*)(int)) toupper);