2017-03-17 22 views
5

Mam trochę kodu C++, który używa jakiejś wersji Google GTest framework. Ten kod używany do kompilacji dobrze z Visual Studio 2015. I właśnie uaktualniony do VS2017 i teraz mam kilka błędów takiego:std :: tr1 z studio graficznym 2017

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

jest jakaś opcja kompilator potrzebne do korzystania z std :: tr1 w VS2017?

Odpowiedz

6

Jedną opcją jest ponowne włączenie TR1; zrób to, definiując makro _HAS_TR1_NAMESPACE, jak krótko wspomniano w this blog article. Jeśli korzystasz z projektu MSBuild, najlepiej zrobić to za pomocą ustawienia twojego projektu: Preprocessor Definitions; lub jeśli używasz prekompilowanego nagłówka, definiując go na górze wspomnianego PCH.

Lepszą opcją jest poinformowanie GTest, że twój kompilator obsługuje C++ 11 przez zdefiniowanie makra GTEST_LANG_CXX11 do 1 przed dołączeniem jakichkolwiek nagłówków GTest; wówczas będzie używać std::tuple zamiast std::tr1::tuple *. (GTest's C++11-detection logic jest zorientowany na , który VC++ nie został jeszcze zaktualizowany, mimo że jest w większości zgodny z C++ 11 i C++ 14. Powiedziałbym, że jest to błąd w GTest, ponieważ obsługuje on VC++ w innym miejscu w całej logice konfiguracji.)

* Nie wspominając o innych funkcjach C++ 11, dlatego jest to zdecydowanie lepsza opcja; -]

+0

Dzięki. Wybrałem opcję _HAS_TR1_NAMESPACE i zadziałało. – Dess

Powiązane problemy