如何在Qt Creator中启用C ++ 11?


167

标题很容易描述。我已经下载了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

但是,根据本文,此版本的Qt Creator支持C ++ 11。那么如何启用它呢?


3
Qt Creator不是编译器。当您读到“ Qt Creator支持C ++ 11”时,表示代码完成引擎(在这种情况下为Clang)支持C ++ 11语法。
cmannett85 2013年

@ cmannett85 Qt Creator仍然不使用Clang作为C ++语法解析器。尽管付出了很多努力,但是Clang的API和该解决方案的总体性能延迟了这一过程。这方面的当前工作位于此处
rubenvb 2014年

Answers:


261

根据此网站添加

CONFIG += c++11

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


其他答案,暗示

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

也可以使用Qt 4.8和gcc / clang。


4
匿名小票对任何人都没有帮助。答案有什么问题?
阿里

问题是,我无法删除您重复/不完整的答案,我所能做的就是拒绝投票。既然您已经对其进行了编辑以使其更加美观,那么我对否决票感到满意。
nurettin

9
@nurettin感谢您的反馈。如果仔细检查答案的编辑历史记录(我的答案和其他答案),您会发现我的原始答案不是重复的;实际上,这是另一个答案,它无耻地偷了我的一部分答案,使我的答案看起来像重复的一样。然后,今年又出现了两个重复的答案。在编辑历史记录中自行检查。有了这些信息,您会重新考虑自己的否决权吗?
阿里

3
@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是相同的。
阿里

1
@Troyseph现在,-std=c++11如果编译器支持它,那就更好了,而且Qt足够聪明了。好吧,如果这个问题对您造成了很大的伤害,您可以提交错误报告...
阿里

32

将此添加到您的.pro文件

QMAKE_CXXFLAGS += -std=c++11

要么

CONFIG += c++11

18

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

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

到我的项目文件。当您不太在乎团队中使用的Qt版本时,这很方便,但是无论如何您都希望他们启用C ++ 11。


这应该是-std = c ++ 11
Predrag Manojlovic

8

添加到您的qmake文件

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

4

如果您使用的是QT的早期版本(<5),请尝试此操作

QMAKE_CXXFLAGS += -std=c++0x

1

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

... \ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.