std :: tr1 with visual studio 2017
问题描述:
我有一些使用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需要一些编译器选项?
答
一种选择是重新启用TR1;通过定义宏_HAS_TR1_NAMESPACE
来执行此操作,如this blog article中简要提及的那样。如果您使用的是MSBuild项目,那么最好通过项目的Preprocessor Definitions设置完成;或者如果您正在使用预编译头文件,请将其定义在PCH的顶部。
一个更好的选择是在包含任何GTest头文件之前,通过定义宏GTEST_LANG_CXX11
到1
来通知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功能,这就是为什么这是更好的选择; - ]
谢谢。我选择了_HAS_TR1_NAMESPACE选项,它工作。 – Dess