【问题标题】:std::tr1 with visual studio 2017带有视觉工作室 2017 的 std::tr1
【发布时间】:2017-08-08 09:30:33
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-c++ visual-studio-2017 c++17 tr1


    【解决方案1】:

    一种选择是重新启用 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 是面向__cplusplus 的,尽管它主要兼容 C++11 和 C++14,但 VC++ 尚未更新。我想说这是 GTest 中的一个错误,因为它在整个配置逻辑的其他地方都支持 VC++。 )

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

    【讨论】:

    • 谢谢。我选择了 _HAS_TR1_NAMESPACE 选项,它起作用了。
    【解决方案2】:

    Googletest release 1.8.1 修复了这个问题(结合 VS2017 15.8.5)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-12
      • 2017-04-25
      • 2018-12-03
      • 1970-01-01
      • 2018-09-04
      • 2018-01-30
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多