我有一些C++代码,它使用了谷歌的GTest框架的某些版本。此代码用于使用Visual 2015很好地编译。我刚刚升级到VS2017,现在我收到了很多这样的错误:
error C2039: 'tr1': is not a member of 'std'
error C3083: 'tr1': the symbol to the left of a '::' must be a type在VS2017中使用std::tr1是否需要一些编译器选项?
发布于 2017-03-17 00:27:53
一个选项是重新启用TR1;通过定义宏_HAS_TR1_NAMESPACE来实现这一点,就像这篇博客文章中简要提到的那样。如果您使用的是一个MSBuild项目,那么最好通过您的项目的预处理定义设置来完成;或者如果您使用的是一个预编译的头,通过在所述预处理定义的顶部定义它。
一个更好的选择是在包含任何GTest头之前通过将宏GTEST_LANG_CXX11定义为1来通知1编译器支持1;然后它将使用std::tuple而不是std::tr1::tuple*。(GTest的C++11-检测逻辑是__cplusplus-oriented,尽管基本上符合C++11和C++14,但VC++仍未对其进行更新。我想说这是GTest中的一个bug,因为它在整个配置逻辑的其他地方支持VC++。)
*更别提其他C++11特性,这就是为什么这是更好的选择;
发布于 2018-09-22 15:25:09
Googletest 1.8.1版修复了这个问题(结合VS2017 15.8.5)。
https://stackoverflow.com/questions/42847103
复制相似问题