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

174

这个标题已经很明确了。我已经下载了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
@cmannett85 Qt Creator仍未使用Clang作为C++语法解析器。虽然有过尝试,但是由于Clang的API和该解决方案的总体性能问题而导致了延迟。目前在这个方向上的工作位于这里 - rubenvb
6个回答

264
根据这个网站的说明,在您的.pro文件中添加以下代码:

CONFIG += c++11

请参考该网页底部。请注意,这需要Qt 5。
其他答案建议使用以下代码:

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

这也适用于Qt 4.8和gcc / clang。

5
匿名的踩并没有对任何人有所帮助。这个回答有什么问题?我不明白为什么要踩它。 - Ali
11
谢谢您的反馈。如果您仔细检查答案的编辑历史记录(我的和其他人的),您会发现我的原始答案并不是重复的,实际上是另一个答案无耻地抄袭了我的一部分答案,使得我的答案看起来像是重复的。然后今年又出现了两个重复的答案。请在编辑历史记录中自行查证。鉴于这些信息,您是否会重新考虑您的负评? - Ali
由于某种原因,即使我已经配置了我的项目以使用C++11,Qt Creator仍然给我报错。太奇怪了...我使用的是Qt Creator 3.2.1版本,构建于Qt 5.3.2。然而,@guardezi的答案对我有效。 - rbaleksandar
3
这是我对情况的理解。我假设你正在使用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”是相同的。 - Ali
1
@Troyseph 现在,如果编译器支持的话,最好使用“-std=c++11”,而Qt可能足够聪明以这种方式运行。如果这个问题让你很困扰,你可以提交一个错误报告... - Ali
显示剩余14条评论

33

将以下内容添加到您的.pro文件

QMAKE_CXXFLAGS += -std=c++11
或者
CONFIG += c++11

19
作为处理Ali优秀回答所涉及两种情况的另一种选择,我通常会添加
标签。
# 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接