2017-03-17 130 views
5

我有一些使用Google GTest框架某些版本的C++代碼。使用此代碼編譯罰款與Visual Studio 2015年我剛剛升級到VS2017,現在我得到這樣一堆錯誤: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 

是使用std :: TR1在VS2017需要一些編譯器選項?

回答

6

一種選擇是重新啓用TR1;通過定義宏_HAS_TR1_NAMESPACE來執行此操作,如this blog article中簡要提及的那樣。如果您使用的是MSBuild項目,那麼最好通過項目的Preprocessor Definitions設置完成;或者如果您正在使用預編譯頭文件,請將其定義在PCH的頂部。

一個更好的選擇是在包含任何GTest頭文件之前,通過定義宏GTEST_LANG_CXX111來通知GTest您的編譯器支持C++ 11;那麼它將使用std::tuple而不是std::tr1::tuple *。 (GTest's C++11-detection logic is __cplusplus-oriented,雖然大多數C++ 11和C++ 14兼容,但VC++還沒有更新。我想說這是GTest中的一個bug,因爲它在整個配置邏輯中的其他地方支持VC++。)

*更不用說其他C++ 11功能,這就是爲什麼這是更好的選擇; - ]

+0

謝謝。我選擇了_HAS_TR1_NAMESPACE選項,它工作。 – Dess