2017-03-17 3 views
5

Google의 GTest 프레임 워크의 일부 버전을 사용하는 C++ 코드가 있습니다. 이 코드는 Visual Studio를 그냥 VS2017로 업그레이드 2015 괜찮 컴파일하는 데, 지금은 이런 오류의 무리 얻을 :std :: tr1 with visual studio 2017

error C2039: 'tr1': is not a member of 'std' 
error C3083: 'tr1': the symbol to the left of a '::' must be a type 

가 VS2017에서 표준 : (TR1)를 사용하는 데 필요한 몇 가지 컴파일러 옵션을?

답변

6

하나의 옵션은 TR1을 다시 활성화하는 것입니다. 매크로 _HAS_TR1_NAMESPACE을 정의하여 이것을 수행하십시오 (간략하게는 this blog article 참조). MSBuild 프로젝트를 사용하는 경우 프로젝트의 Preprocessor Definitions 설정을 사용하는 것이 가장 좋습니다. 또는 미리 컴파일 된 헤더를 사용하는 경우, 해당 PCH의 맨 위에 정의하여.

더 나은 옵션은 GTest 헤더를 포함하기 전에 GTEST_LANG_CXX11에서 1 매크로를 정의하여 컴파일러에서 C++ 11을 지원한다는 것을 GTest에 알리는 것입니다. std::tr1::tuple * 대신 std::tuple을 사용합니다. (GTest's C++11-detection logic__cplusplus -oriented입니다. VC++는 대부분 C++ 11 및 C++ 14 호환에도 불구하고 아직 업데이트하지 않았습니다. 구성 로직 전반에서 VC++를 지원하므로 GTest의 버그라고합니다.)

* 다른 C++ 11 기능은 말할 것도없고, 이것이 더 나은 옵션입니다. -]

+0

감사합니다. _HAS_TR1_NAMESPACE 옵션을 선택했는데 성공했습니다. – Dess