0

cygwinでg++(gccバージョン3.4.4)を実行しています。

この小さなコードスニペットをコンパイルすることができません。適切なヘッダーを含めました。

int main(){

    std::string temp("asgfsgfafgwwffw");

    std::transform(temp.begin(),
                   temp.end(),
                   temp.begin(),
                   std::toupper);

    std::cout << "result:" << temp << std::endl;

    return 0;
}

ベクターなどのSTLコンテナの使用に問題はありません。誰かがこの状況について何か提案や洞察を持っていますか?ありがとう。

4

2 に答える 2

2

上記のリンクから。

#include <cctype> // for toupper
#include <string>
#include <algorithm>
using namespace std;

void main()
{
string s="hello";
transform(s.begin(), s.end(), s.begin(), toupper);
}

残念ながら、「toupper」という名前があいまいなため、上記のプログラムはコンパイルされません。次のいずれかを参照できます。

int std::toupper(int); // from <cctype>

また

template <class chart> 
  charT std::toupper(charT, const locale&);// from 
  <locale>

明示的なキャストを使用して、あいまいさを解決します。

std::transform(s.begin(), s.end(), s.begin(), 
               (int(*)(int)) toupper);

これにより、コンパイラは適切なtoupper()を選択するように指示されます。

于 2009-11-23T19:47:29.273 に答える
0

これはそれを非常によく説明しています。

これは、このコードに要約されます。

std::transform(temp.begin(),temp.end(),temp.begin(),static_cast<int (*)(int)>(std::toupper));
于 2009-08-29T04:01:16.707 に答える