标题非常自我描述。我已经下载了 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。那么如何启用它呢?
根据this site添加
CONFIG += c++11
到您的 .pro 文件(请参阅该网页的底部)。它需要 Qt 5。
其他答案,建议
QMAKE_CXXFLAGS += -std=c++11
(或 QMAKE_CXXFLAGS += -std=c++0x
)
也适用于 Qt 4.8 和 gcc / clang。
将此添加到您的 .pro 文件中
QMAKE_CXXFLAGS += -std=c++11
或者
CONFIG += c++11
作为处理阿里出色答案中解决的两种情况的替代方法,我通常会添加
# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}
到我的项目文件。当您不太关心团队中人们使用哪个 Qt 版本时,这可能会很方便,但您希望他们在任何情况下都启用 C++11。
添加到您的 qmake 文件
QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS += -std=c++11
如果您使用的是早期版本的 QT (<5) 试试这个
QMAKE_CXXFLAGS += -std=c++0x
我成功使它工作的唯一地方是通过搜索:
...\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
-std=c++11
,那么它也应该支持(已弃用的)-std=c++0x
标志,并且这两个标志应该具有相同的效果(在您的机器上显然不是这种情况)。如果编译器支持-std=c++0x
,并不意味着它理解-std=c++11
。因此,选择-std=c++0x
作为 C++11 兼容模式的默认值是一个合理的选择。在我的机器上,至少根据手册页,-std=c++0x
和-std=c++11
是相同的。-std=c++11
确实会更好,并且 Qt 可以足够聪明地这样做。好吧,如果这个问题对您造成如此大的伤害,您可以提交错误报告...