2014-12-13 5 views
2

작동, 난 exponential_distribution 작품이지만,와 Mingw-W64의 G ++에서 (C++ TR1 헤더 <tr1/random>에서) uniform_int_distribution을 사용할 수 없습니다. 가와 Mingw-W64에서 "uniform_int_distribution"하지만, "exponential_distribution"를 사용할 수 없습니다 어떤 이유로

#include <tr1/random> 

using namespace std; 

int main() { 
    tr1::random_device rd; 
    tr1::exponential_distribution<int> exprng(1); 
    tr1::uniform_int_distribution<> unirng(5, 500); 
    tr1::mt19937 rnd_gen(rd()); 
    // ... 
} 

나는 그것을 컴파일하려고

, 나는이 얻을 : 내가 컴파일러, 4.9.2의 최신 버전을 실행하고있어

> g++ -o foo.exe -std=c++11 foo.cpp 
foo.cpp: In function 'int main()': 
foo.cpp:8:5: error: 'uniform_int_distribution' is not a member of 'std::tr1' 
    tr1::uniform_int_distribution<> unirng(5, 500) 
    ^
foo.cpp:8:35: error: expected primary-expression before '>' token 
    tr1::uniform_int_distribution<> unirng(5, 500); 
           ^
foo.cpp:8:50: error: 'unirng' was not declared in this scope 
    tr1::uniform_int_distribution<> unirng(5, 500); 
               ^

다음은 관련 코드입니다. 이미 using namespace std을 제거하고 이름 공간 접두사를 std::tr1std으로 변경했습니다. 어떤 아이디어?

+4

TR1에서 'uniform_int'라고 부르지 않습니까? 'uniform_int_distribution'에 대해서는 TR1이 아니라 C++ 11 표준 라이브러리의''을 포함하십시오. – dyp

+1

훌륭합니다. 자기 답변 작성하기. – bwDraco

답변

2

좋아, 나는 C++ TR1과 C++ 11 헤더가 섞여있다.

내가 GCC 문서를 잘못 읽은 결과로 C++ TR1 헤더를 사용했지만 uniform_int_distribution이 C++ 11의 일부인 것으로 나타났습니다. C++ 11과 C++ TR1은 소스와 정확히 호환되지 않으며 약간의 조정이 필요합니다. 다음과 같이

수정 된 코드는 다음과 같습니다. (나는 템플릿 인수 부동 소수점 형이어야한다는 얘기 프로그램 - 컴파일러에 나중에 exponential_distribution 출력 캐스팅 것)

#include <random> 

using namespace std; 

int main() { 
    random_device rd; 
    exponential_distribution<> exprng(1); 
    uniform_int_distribution<> unirng(5, 500); 
    mt19937 rnd_gen(rd()); 
    // ... 
}