繁体   English   中英

std::tr1 与 Visual Studio 2017

[英]std::tr1 with visual studio 2017

我有一些 C++ 代码使用了某些版本的 Google 的 GTest 框架。 这段代码过去可以用 Visual Studio 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 是否需要一些编译器选项?

一种选择是重新启用 TR1; 通过定义宏_HAS_TR1_NAMESPACE做到这_HAS_TR1_NAMESPACE ,正如这篇博客文章中简要提到的那样。 如果您使用的是 MSBuild 项目,那么最好通过项目的Preprocessor Definitions设置来完成; 或者,如果您使用的是预编译头,则通过在所述 PCH 的顶部定义它。

更好的选择是在包含任何 GTest 头文件之前通过将宏GTEST_LANG_CXX11定义为1来通知 GTest 您的编译器支持 C++11; 那么它将使用std::tuple而不是std::tr1::tuple *。 GTest 的 C++11 检测逻辑__cplusplus的,尽管大部分符合 C++11 和 C++14,但 VC++ 尚未更新。我会说这是 GTest 中的一个错误,因为它在整个过程中的其他地方都支持 VC++配置逻辑。)

* 更不用说其他 C++11 特性了,这就是为什么这是迄今为止更好的选择;-]

Googletest1.8.1 版修复了这个问题(结合 VS2017 15.8.5)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM