ChatGPT解决这个技术问题 Extra ChatGPT

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

标题非常自我描述。我已经下载了 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

A
Ali

根据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 可以足够聪明地这样做。好吧,如果这个问题对您造成如此大的伤害,您可以提交错误报告...
G
Guilherme Nascimento

将此添加到您的 .pro 文件中

QMAKE_CXXFLAGS += -std=c++11

或者

CONFIG += c++11

Я
Яois

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

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

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


这应该是 -std=c++11
g
guardezi

添加到您的 qmake 文件

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

a
asloob

如果您使用的是早期版本的 QT (<5) 试试这个

QMAKE_CXXFLAGS += -std=c++0x

B
Bretzelus

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

...\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