проблемы с использованием STL std :: transform из cygwin g ++ - PullRequest
0 голосов
/ 29 августа 2009

Я использую g ++ (gcc версии 3.4.4) на Cygwin.

Я не могу получить этот небольшой фрагмент кода для компиляции. Я включил соответствующие заголовки.

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, таких как vector. Есть ли у кого-нибудь какие-либо предложения или идеи в этой ситуации. Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2009

Из ссылки выше .

#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);

Это даст указание компилятору выберите правильный штопор ().

0 голосов
/ 29 августа 2009

Это очень хорошо объясняет.

Что будет сводиться к этому коду:

std::transform(temp.begin(),temp.end(),temp.begin(),static_cast<int (*)(int)>(std::toupper));
...