2017-03-17 18 views
5

Google'ın GTest çerçevesinin bazı sürümünü kullanan bazı C++ kodlarım var. Bu kod Visual Studio Ben sadece VS2017 yükseltilmiş 2015 ile ince derlemek için kullanılan ve şimdi böyle hataların bir demet olsun:std :: tr1

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

VS2017 içinde std :: TR1 kullanmak için gereken bazı derleyici seçeneği var mı?

cevap

6

Bir seçenek TR1'i yeniden etkinleştirmektir; 'da kısaca belirtildiği gibi makroyu _HAS_TR1_NAMESPACE tanımlayarak yapın. Bir MSBuild projesi kullanıyorsanız, projenizin en iyi yolu Preprocessor Definitions ayarı ile yapılır; veya önceden derlenmiş bir üstbilgi kullanıyorsanız, söz konusu PCH'nin üstünde tanımlayarak.

GTest'i, herhangi bir GTest başlığı dahil etmeden önce GTEST_LANG_CXX11 - 1 için makroyu tanımlayarak derleyicinizin C++ 11'i desteklediğini bildirmek daha iyi bir seçenektir; daha sonra std::tr1::tuple * yerine std::tuple kullanır. (GTest's C++11-detection logic VC++ henüz çoğunlukla C++ 11 ve C++ 14 uyumlu olmasına rağmen yaptığını henüz Odaklı __cplusplus vardır. O konfigürasyon mantığı boyunca başka bir yerde VC++ destekler beri bu GTEST bir hata olduğunu söyleyebilirim.)

* Diğer C++ 11 özelliklerinden bahsetmemek gerekirse, bu daha iyi bir seçenek çünkü; -]

+0

Teşekkürler. _HAS_TR1_NAMESPACE seçeneğini seçtim ve işe yaradı. – Dess

İlgili konular