2013-02-15 2 views
5

이 문제가 발생하기 전에 해결 방법을 찾았지만 이번에는 해결 방법이 없습니다.함수 'stof'를 확인할 수 없습니다.

나는 'stof'기능을 사용하기 위해 노력하고있어하지만 내가 말하는 오류를 받고 있어요 : 'stof은'

나 '

를 확인할 수 없습니다 기능'stof ''표준 '의 멤버가 아닙니다 정확한 방법으로 그것을 사용하고이 페이지에 표시되는 경우 : http://www.cplusplus.com/reference/string/stof/

그리고 여기 내이 포함되어 있습니다 :

그래서
#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

, 내가 무슨 일을하고 있는가? 그리고 솔루션을 찾을 수없는 경우 문자열을 부동으로 변환하는 다른 방법을 누군가에게 알려줄 수 있으며 문자열이 호환되지 않는 경우 예외를 throw 할 수 있습니까?

EDIT : 샘플 프로그램 및 오류로 업데이트 중. 내가 할

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string testString = ""; 
    float testFloat = 0.0; 
    testFloat = std::stof(testString); 

    return 0; 
} 

오류는 다음과 같습니다

설명 리소스 경로 위치 유형 'stof'되지 '표준'MAIN.CPP/할당/src에 라인 (33) C/C++ 문제의 일원

설명 리소스 경로 위치 유형 기능 'stof는'MAIN.CPP/할당/src에 라인 (33)

+7

'std :: stof'는 C++ 11 표준에서 새로 추가되었습니다. C++ 11 호환 컴파일러를 사용하고 있습니까? –

+1

잘 모르겠다. 나는 C++에 익숙하지 않지만 내 명령 중 하나 인 "-std = C++ 11"을 가지고있다. –

+0

-stdlib = libC++ –

답변

6

stof을 올바르게 사용하고 있습니다. gcc 4.7.2의 MinGW 빌드에있는 known bug입니다. gcc 4.8에서 수정되어야합니다. 문자열을 숫자로 변환하는 수많은 예제가 있습니다. 여기에 one입니다. 원하는 예외 동작을 얻으려면 직접 롤백해야하지만 예제를 시작해야합니다.

+0

아, 그러면 모든 것을 설명해 줄 겁니다. 문자열을 부동 소수점으로 변환 할 수있는 다른 방법을 알고 있으며 호환되지 않는 경우 예외를 throw합니까? –

+2

[boost :: lexical_cast'] (http://www.boost.org/doc/libs/1_53_0/doc/html/boost_lexical_cast/synopsis.html#boost_lexical_cast.synopsis.lexical_cast)는 실패 할 경우 예외를 throw합니다. –

7

stof는 C++ 11 기능입니다 시맨틱 오류를 확인할 수 없습니다. 컴파일러가이를 지원하는지 확인하십시오 (컴파일러가 없어도 C++ 11을 완벽하게 지원하지는 않지만 현재 대부분의 컴파일러가 상당히 큰 부분 집합을 지원합니다).

예를 들어 -std=c++11 옵션 (std=c++0x 사전 g ++ - 4.7)을 사용하여 g ++에서 사용하도록 설정해야합니다.

g ++를 사용하는 경우 사용중인 버전을 g++ -v으로 확인하십시오. 이전 버전 인 경우 (예 : 4.2) C++ 11 기능을 사용할 수 없습니다.

+0

"-v"로 컴파일되어 발견되었습니다 : gcc 버전 4.7.2 (GCC) 빌드 보고서 –

+1

gcc 4.7 .2, 그것은'-std = C++ 11'과'-std = C++ 0x'와 함께 확실히 작동합니다. –