2009-08-29 2 views
0

cygwin에서 g ++ (gcc 버전 3.4.4)를 실행 중입니다.cygwin에서 std :: transform을 사용하는 데 문제가 있습니다. g ++

이 작은 스 니펫을 컴파일 할 수 없습니다. 나는 적절한 헤더를 포함시켰다.

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 컨테이너를 사용하는 데 어떤 문제도 없었습니다. 누구든지이 상황에 대한 제안이나 통찰력을 갖고 있습니까? 감사합니다. .

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

오류 메시지도 게시 할 수 있습니까? – avakar

+0

"적절한 헤더"는 무엇이며 어떤 오류가 발생합니까? 귀하의 질문은 "올바른 코드를 작성하고 있지만 작동하지 않습니다. 무엇이 잘못 되었습니까?"라고 대답 할 수도 있습니다. 우리는 1) 현재하고있는 일과 2) 오류가 무엇인지 알아야합니다. – jalf

+0

이 문제에 대한 좋은 설명이 있습니다 (그리고 해결책입니다) [여기] (http://stackoverflow.com/a/7132065/1165522). –

답변

0

This explains it quite well.

.

#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는'모호한 때문에 아아, 프로그램이 위의 컴파일되지 것입니다. (오른쪽의 ToUpper 선택이 하도록 컴파일러에 지시합니다

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

:

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

또는

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

명시 적 캐스트를 사용

가 모호성을 해결하기 위해 : 그것은에 하나를 참조 할 수 있습니다).

+1

해당 게시물의 문제 *를 설명하십시오. 외부 기사가 게시 중단 될 수 있으며 귀하의 답변은 쓸모 없게됩니다. 게다가 우리의 대답이 옳은지 아닌지를 알기 위해 외부 링크를 따라야하는 것은 고통입니다. – jalf

+0

나는이 명백한 해결책을 놓친 것에 대해 사과드립니다. – Pradyot

2

link above에서이 코드로 요약됩니다

관련 문제