【问题标题】:How to enable C++11 in Qt Creator?如何在 Qt Creator 中启用 C++11?
【发布时间】:2013-06-01 15:39:16
【问题描述】:

标题非常具有自我描述性。我已经下载了 Qt Creator 2.7.0,我正在尝试编译一些基本的 C++11 代码:

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}

我收到以下错误:

range based for loops are not allowed in c++ 98 mode

然而,根据this article,这个版本的 Qt Creator 支持 C++11。那么如何启用呢?

【问题讨论】:

  • Qt Creator 不是编译器。当您阅读“Qt Creator 支持 C++11”时,这意味着代码完成引擎(在本例中为 Clang)支持 C++11 语法。
  • @cmannett85 Qt Creator 仍然不使用 Clang 作为 C++ 语法解析器。有一些努力,但 Clang 的 API 和该解决方案的一般性能延迟了这一点。目前该方向的工作位于here

标签: c++ qt c++11


【解决方案1】:

根据this site添加

CONFIG += c++11

到您的 .pro 文件(请参阅该网页的底部)。 需要 Qt 5。


其他答案,建议

QMAKE_CXXFLAGS += -std=c++11(或QMAKE_CXXFLAGS += -std=c++0x

也适用于 Qt 4.8 和 gcc / clang。

【讨论】:

  • 匿名投票对任何人都没有帮助。答案有什么问题?
  • 问题是,我无法删除您重复/不完整的答案,我所能做的就是否决它。现在您已经对其进行了编辑以使其更美观,我很高兴只是投反对票。
  • @nurettin 感谢您的反馈。如果您仔细检查答案的编辑历史(我的和其他的),您会发现我的原始答案不是重复的;实际上是另一个答案无耻地窃取了我的部分答案,使我的答案看起来像是重复的。然后今年又出现了两个重复的答案。在编辑历史中自己检查一下。鉴于这些信息,您会重新考虑您的反对意见吗?
  • @Troyseph 这是我对这种情况的理解。我假设您正在使用 gcc。如果某个版本的 gcc 支持-std=c++11,那么它也应该支持(已弃用的)-std=c++0x 标志,并且这两个标志应该具有相同的效果(在您的机器上显然不是这种情况)。如果编译器支持-std=c++0x,并不意味着它理解-std=c++11。因此,选择-std=c++0x 作为 C++11 兼容模式的默认值是一个合理的选择。在我的机器上,至少根据手册页-std=c++0x-std=c++11 是相同的。
  • @Troyseph 现在,如果编译器支持-std=c++11 确实会更好,而且 Qt 可以足够聪明地这样做。好吧,如果这个问题对您造成如此大的伤害,您可以提交错误报告...
【解决方案2】:

将此添加到您的 .pro 文件

QMAKE_CXXFLAGS += -std=c++11

CONFIG += c++11

【讨论】:

    【解决方案3】:

    作为处理阿里出色答案中解决的两种情况的替代方法,我通常添加

    # With C++11 support
    greaterThan(QT_MAJOR_VERSION, 4){    
    CONFIG += c++11
    } else {
    QMAKE_CXXFLAGS += -std=c++0x
    }
    

    到我的项目文件。当您不太关心团队中人们使用哪个 Qt 版本,但您希望他们在任何情况下都启用 C++11 时,这会很方便。

    【讨论】:

    • 这应该是-std=c++11
    【解决方案4】:

    添加到您的 qmake 文件中

    QMAKE_CXXFLAGS+= -std=c++11
    QMAKE_LFLAGS +=  -std=c++11
    

    【讨论】:

      【解决方案5】:

      如果您使用的是早期版本的 QT (

      QMAKE_CXXFLAGS += -std=c++0x
      

      【讨论】:

        【解决方案6】:

        我成功使它工作的唯一地方是搜索:

        ...\Qt\{5.9;或你的版本}\mingw{53_32;或者你的 版本}\mkspecs\win32-g++\qmake.conf:

        然后在行:

        QMAKE_CFLAGS           += -fno-keep-inline-dllexport
        

        编辑:

        QMAKE_CFLAGS           += -fno-keep-inline-dllexport -std=c++11
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-04
          • 1970-01-01
          • 1970-01-01
          • 2012-03-22
          • 2013-05-06
          • 1970-01-01
          • 1970-01-01
          • 2015-10-02
          相关资源
          最近更新 更多